From ed7e07f7bd92baa96b33aa9a83f6a9b15298a0ab Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Mon, 13 Jan 2025 14:41:32 -0300 Subject: [PATCH 1/6] Enable clickhouse support on MetricFlow --- .github/workflows/cd-sql-engine-tests.yaml | 31 +- Makefile | 8 + .../dbt_connectors/adapter_backed_client.py | 6 + local-data-warehouses/Makefile | 4 + .../clickhouse/docker-compose.yaml | 16 + metricflow/protocols/sql_client.py | 3 + metricflow/sql/render/clickhouse.py | 276 +++ metricflow/sql/render/sql_plan_renderer.py | 4 + pyproject.toml | 17 + .../metricflow_testing/profiles.yml | 11 + .../fixtures/sql_client_fixtures.py | 4 + .../sql_clients/adapter_backed_ddl_client.py | 18 +- .../fixtures/sql_clients/common_client.py | 1 + tests_metricflow/generate_snapshots.py | 12 +- .../populate_persistent_source_schemas.py | 1 + .../test_saved_query__cli_output.txt | 54 + ...ery_with_cumulative_metric__cli_output.txt | 40 + ...est_saved_query_with_limit__cli_output.txt | 49 + ...est_saved_query_with_where__cli_output.txt | 50 + .../test_conversion_metric__plan0.sql | 523 +++++ ...est_conversion_metric__plan0_optimized.sql | 130 ++ ..._metric_with_categorical_filter__plan0.sql | 546 +++++ ...th_categorical_filter__plan0_optimized.sql | 153 ++ ...different_time_dimension_grains__plan0.sql | 403 ++++ ...time_dimension_grains__plan0_optimized.sql | 85 + ...t_conversion_metric_with_filter__plan0.sql | 509 ++++ ...on_metric_with_filter__plan0_optimized.sql | 112 + ...ric_with_filter_not_in_group_by__plan0.sql | 519 +++++ ...ilter_not_in_group_by__plan0_optimized.sql | 124 + ...ion_metric_with_time_constraint__plan0.sql | 627 +++++ ..._with_time_constraint__plan0_optimized.sql | 144 ++ ...t_conversion_metric_with_window__plan0.sql | 523 +++++ ...on_metric_with_window__plan0_optimized.sql | 130 ++ ...with_window_and_time_constraint__plan0.sql | 640 ++++++ ...w_and_time_constraint__plan0_optimized.sql | 155 ++ .../test_conversion_metric__query_output.txt | 15 + ..._with_categorical_filter__query_output.txt | 10 + ...nt_time_dimension_grains__query_output.txt | 8 + ...h_filter_not_in_group_by__query_output.txt | 8 + ...ric_with_time_constraint__query_output.txt | 8 + ...rsion_metric_with_window__query_output.txt | 15 + ...ndow_and_time_constraint__query_output.txt | 9 + ...nversion_count_with_no_group_by__plan0.sql | 415 ++++ ...ount_with_no_group_by__plan0_optimized.sql | 85 + ...timespine_and_fill_nulls_with_0__plan0.sql | 531 +++++ ...and_fill_nulls_with_0__plan0_optimized.sql | 133 ++ .../test_conversion_rate__plan0.sql | 439 ++++ .../test_conversion_rate__plan0_optimized.sql | 112 + ...n_rate_with_constant_properties__plan0.sql | 467 ++++ ...h_constant_properties__plan0_optimized.sql | 138 ++ ...onversion_rate_with_no_group_by__plan0.sql | 415 ++++ ...rate_with_no_group_by__plan0_optimized.sql | 85 + ...est_conversion_rate_with_window__plan0.sql | 452 ++++ ...sion_rate_with_window__plan0_optimized.sql | 123 + ...st_convert_query_semantic_model__plan0.sql | 33 + ...le_semantic_model_with_measures__plan0.sql | 63 + ...semantic_model_without_measures__plan0.sql | 35 + ..._metric_with_non_default_grains__plan0.sql | 186 ++ ...th_non_default_grains__plan0_optimized.sql | 51 + .../test_cumulative_metric__plan0.sql | 99 + ...est_cumulative_metric__plan0_optimized.sql | 18 + ...cumulative_metric_grain_to_date__plan0.sql | 99 + ..._metric_grain_to_date__plan0_optimized.sql | 18 + .../test_cumulative_metric_no_ds__plan0.sql | 94 + ...mulative_metric_no_ds__plan0_optimized.sql | 15 + ...est_cumulative_metric_no_window__plan0.sql | 99 + ...tive_metric_no_window__plan0_optimized.sql | 18 + ..._no_window_with_time_constraint__plan0.sql | 233 ++ ..._with_time_constraint__plan0_optimized.sql | 38 + ...c_with_agg_time_and_metric_time__plan0.sql | 153 ++ ..._time_and_metric_time__plan0_optimized.sql | 21 + ..._metric_with_agg_time_dimension__plan0.sql | 148 ++ ...th_agg_time_dimension__plan0_optimized.sql | 19 + ...th_multiple_agg_time_dimensions__plan0.sql | 153 ++ ...e_agg_time_dimensions__plan0_optimized.sql | 21 + ...multiple_metric_time_dimensions__plan0.sql | 153 ++ ...etric_time_dimensions__plan0_optimized.sql | 21 + ...with_non_adjustable_time_filter__plan0.sql | 443 ++++ ...djustable_time_filter__plan0_optimized.sql | 31 + ...e_metric_with_non_default_grain__plan0.sql | 174 ++ ...ith_non_default_grain__plan0_optimized.sql | 42 + ...ive_metric_with_time_constraint__plan0.sql | 237 ++ ..._with_time_constraint__plan0_optimized.sql | 42 + ..._metric_with_non_default_grains__plan0.sql | 177 ++ ...th_non_default_grains__plan0_optimized.sql | 45 + ...e_metric_with_non_default_grain__plan0.sql | 174 ++ ...ith_non_default_grain__plan0_optimized.sql | 42 + ..._metric_with_non_default_grains__plan0.sql | 186 ++ ...th_non_default_grains__plan0_optimized.sql | 51 + ...w_metric_with_non_default_grain__plan0.sql | 170 ++ ...ith_non_default_grain__plan0_optimized.sql | 38 + ..._metric_with_non_default_grains__plan0.sql | 428 ++++ ...th_non_default_grains__plan0_optimized.sql | 64 + ...th_non_adjustable_filter__query_output.txt | 9 + ...o_date_cumulative_metric__query_output.txt | 11 + ...tiple_cumulative_metrics__query_output.txt | 69 + ...ditive_cumulative_metric__query_output.txt | 11 + ...simple_cumulative_metric__query_output.txt | 97 + ..._metric_with_custom_granularity__plan0.sql | 449 ++++ ...th_custom_granularity__plan0_optimized.sql | 129 ++ ..._with_custom_granularity_filter__plan0.sql | 545 +++++ ...om_granularity_filter__plan0_optimized.sql | 147 ++ ...nularity_filter_not_in_group_by__plan0.sql | 531 +++++ ...ilter_not_in_group_by__plan0_optimized.sql | 129 ++ ..._metric_with_custom_granularity__plan0.sql | 173 ++ ...th_custom_granularity__plan0_optimized.sql | 41 + ..._metric_with_custom_granularity__plan0.sql | 474 ++++ ...th_custom_granularity__plan0_optimized.sql | 28 + ..._metric_grouped_by_custom_grain__plan0.sql | 281 +++ ...ouped_by_custom_grain__plan0_optimized.sql | 48 + ..._with_custom_granularity_filter__plan0.sql | 404 ++++ ...om_granularity_filter__plan0_optimized.sql | 63 + ...nularity_filter_not_in_group_by__plan0.sql | 402 ++++ ...ilter_not_in_group_by__plan0_optimized.sql | 63 + ...ity_joined_to_non_default_grain__plan0.sql | 169 ++ ..._to_non_default_grain__plan0_optimized.sql | 30 + ...metrics_with_custom_granularity__plan0.sql | 404 ++++ ...th_custom_granularity__plan0_optimized.sql | 65 + ...ity_joined_to_non_default_grain__plan0.sql | 452 ++++ ..._to_non_default_grain__plan0_optimized.sql | 30 + ..._custom_granularity_metric_time__plan0.sql | 63 + ...anularity_metric_time__plan0_optimized.sql | 17 + ...tom_granularity_non_metric_time__plan0.sql | 110 + ...arity_non_metric_time__plan0_optimized.sql | 17 + ..._with_custom_granularity_filter__plan0.sql | 143 ++ ...om_granularity_filter__plan0_optimized.sql | 27 + ...nularity_in_filter_and_group_by__plan0.sql | 143 ++ ...n_filter_and_group_by__plan0_optimized.sql | 26 + ..._metric_with_custom_granularity__plan0.sql | 382 +++ ...th_custom_granularity__plan0_optimized.sql | 39 + ...nularity_filter_not_in_group_by__plan0.sql | 487 ++++ ...ilter_not_in_group_by__plan0_optimized.sql | 48 + ..._metric_with_custom_granularity__plan0.sql | 228 ++ ...th_custom_granularity__plan0_optimized.sql | 27 + ...ith_custom_granularity_and_join__plan0.sql | 476 ++++ ..._granularity_and_join__plan0_optimized.sql | 32 + ..._with_custom_granularity_filter__plan0.sql | 330 +++ ...om_granularity_filter__plan0_optimized.sql | 34 + ...nularity_in_filter_and_group_by__plan0.sql | 335 +++ ...n_filter_and_group_by__plan0_optimized.sql | 37 + ...th_multi_hop_custom_granularity__plan0.sql | 1419 ++++++++++++ ...op_custom_granularity__plan0_optimized.sql | 52 + .../test_build_metric_tasks__query0.sql | 17 + .../test_build_saved_query_tasks__query0.sql | 35 + .../test_combine_output_node__plan0.sql | 240 ++ ...t_combine_output_node__plan0_optimized.sql | 54 + .../test_compute_metrics_node__plan0.sql | 204 ++ ..._compute_metrics_node__plan0_optimized.sql | 30 + ...o_from_multiple_semantic_models__plan0.sql | 860 +++++++ ...tiple_semantic_models__plan0_optimized.sql | 97 + ...atio_from_single_semantic_model__plan0.sql | 207 ++ ...single_semantic_model__plan0_optimized.sql | 39 + ...ompute_metrics_node_simple_expr__plan0.sql | 204 ++ ...rics_node_simple_expr__plan0_optimized.sql | 29 + .../test_constrain_time_range_node__plan0.sql | 122 + ...train_time_range_node__plan0_optimized.sql | 17 + ...on_with_joined_where_constraint__plan0.sql | 240 ++ ...ined_where_constraint__plan0_optimized.sql | 26 + .../test_dimensions_requiring_join__plan0.sql | 179 ++ ...nsions_requiring_join__plan0_optimized.sql | 20 + .../Clickhouse/test_filter_node__plan0.sql | 104 + .../test_filter_node__plan0_optimized.sql | 12 + ...lter_with_where_constraint_node__plan0.sql | 113 + ...where_constraint_node__plan0_optimized.sql | 21 + .../test_measure_aggregation_node__plan0.sql | 118 + ...sure_aggregation_node__plan0_optimized.sql | 18 + .../test_multi_join_node__plan0.sql | 258 +++ .../test_multi_join_node__plan0_optimized.sql | 54 + .../Clickhouse/test_order_by_node__plan0.sql | 134 ++ .../test_order_by_node__plan0_optimized.sql | 28 + .../test_semi_additive_join_node__plan0.sql | 156 ++ ...mi_additive_join_node__plan0_optimized.sql | 110 + ...dditive_join_node_with_grouping__plan0.sql | 163 ++ ...in_node_with_grouping__plan0_optimized.sql | 117 + ...join_node_with_queried_group_by__plan0.sql | 159 ++ ...with_queried_group_by__plan0_optimized.sql | 113 + .../test_single_join_node__plan0.sql | 184 ++ ...test_single_join_node__plan0_optimized.sql | 24 + .../Clickhouse/test_source_node__plan0.sql | 98 + .../test_source_node__plan0_optimized.sql | 98 + ...set_metric_with_time_constraint__plan0.sql | 591 +++++ ..._with_time_constraint__plan0_optimized.sql | 37 + .../Clickhouse/test_derived_metric__plan0.sql | 462 ++++ .../test_derived_metric__plan0_optimized.sql | 31 + ...e_alias_in_different_components__plan0.sql | 480 ++++ ..._different_components__plan0_optimized.sql | 70 + ...nth_dimension_and_offset_window__plan0.sql | 151 ++ ...ion_and_offset_window__plan0_optimized.sql | 36 + ...ved_metric_with_offset_to_grain__plan0.sql | 609 +++++ ..._with_offset_to_grain__plan0_optimized.sql | 62 + ...offset_to_grain_and_granularity__plan0.sql | 611 +++++ ...grain_and_granularity__plan0_optimized.sql | 64 + ...rived_metric_with_offset_window__plan0.sql | 609 +++++ ...ic_with_offset_window__plan0_optimized.sql | 62 + ...h_offset_window_and_granularity__plan0.sql | 610 +++++ ...indow_and_granularity__plan0_optimized.sql | 63 + ...fset_window_and_offset_to_grain__plan0.sql | 756 ++++++ ...w_and_offset_to_grain__plan0_optimized.sql | 74 + ...offset_to_grain_and_granularity__plan0.sql | 759 ++++++ ...grain_and_granularity__plan0_optimized.sql | 76 + ...h_offset_window_and_time_filter__plan0.sql | 817 +++++++ ...indow_and_time_filter__plan0_optimized.sql | 78 + ...erived_offset_cumulative_metric__plan0.sql | 487 ++++ ...set_cumulative_metric__plan0_optimized.sql | 35 + ...offset_metric_with_agg_time_dim__plan0.sql | 609 +++++ ...ric_with_agg_time_dim__plan0_optimized.sql | 63 + ...et_metric_with_one_input_metric__plan0.sql | 376 +++ ...with_one_input_metric__plan0_optimized.sql | 34 + .../test_multi_metric_fill_null__plan0.sql | 399 ++++ ...ulti_metric_fill_null__plan0_optimized.sql | 68 + .../test_nested_derived_metric__plan0.sql | 926 ++++++++ ...nested_derived_metric__plan0_optimized.sql | 74 + ...d_where_constraint_not_selected__plan0.sql | 456 ++++ ...nstraint_not_selected__plan0_optimized.sql | 74 + ...h_offset_multiple_input_metrics__plan0.sql | 527 +++++ ...ultiple_input_metrics__plan0_optimized.sql | 83 + ...d_fill_nulls_without_time_spine__plan0.sql | 236 ++ ...ls_without_time_spine__plan0_optimized.sql | 42 + ...without_time_spine_multi_metric__plan0.sql | 406 ++++ ...me_spine_multi_metric__plan0_optimized.sql | 75 + .../Clickhouse/test_nested_filters__plan0.sql | 1481 ++++++++++++ .../test_nested_filters__plan0_optimized.sql | 79 + .../Clickhouse/test_nested_offsets__plan0.sql | 434 ++++ .../test_nested_offsets__plan0_optimized.sql | 60 + ...ed_offsets_with_time_constraint__plan0.sql | 442 ++++ ..._with_time_constraint__plan0_optimized.sql | 62 + ...d_offsets_with_where_constraint__plan0.sql | 442 ++++ ...with_where_constraint__plan0_optimized.sql | 68 + ...ry_have_different_granularities__plan0.sql | 484 ++++ ...fferent_granularities__plan0_optimized.sql | 46 + ...n_metric_multiple_granularities__plan0.sql | 390 ++++ ...ultiple_granularities__plan0_optimized.sql | 42 + ...fset_to_grain_with_agg_time_dim__plan0.sql | 609 +++++ ...ain_with_agg_time_dim__plan0_optimized.sql | 62 + ...ry_have_different_granularities__plan0.sql | 820 +++++++ ...fferent_granularities__plan0_optimized.sql | 85 + ...w_metric_multiple_granularities__plan0.sql | 641 ++++++ ...ultiple_granularities__plan0_optimized.sql | 87 + ...offset_window_with_agg_time_dim__plan0.sql | 609 +++++ ...dow_with_agg_time_dim__plan0_optimized.sql | 62 + ...set_metric_with_time_constraint__plan0.sql | 480 ++++ ..._with_time_constraint__plan0_optimized.sql | 36 + ...values_with_a_join_and_a_filter__plan0.sql | 242 ++ ...h_a_join_and_a_filter__plan0_optimized.sql | 28 + .../test_dimensions_requiring_join__plan0.sql | 179 ++ ...nsions_requiring_join__plan0_optimized.sql | 20 + .../Clickhouse/test_add_time_expr__plan0.sql | 11 + ...mate_continuous_percentile_expr__plan0.sql | 11 + .../test_cast_to_timestamp__plan0.sql | 11 + ...test_continuous_percentile_expr__plan0.sql | 11 + .../test_discrete_percentile_expr__plan0.sql | 11 + .../Clickhouse/test_generate_uuid__plan0.sql | 11 + ...ith_0_multi_metric_query__query_output.txt | 11 + ...th_categorical_dimension__query_output.txt | 17 + ...custom_grain_in_group_by__query_output.txt | 20 + ...h_filter_not_in_group_by__query_output.txt | 7 + ..._group_by_using_agg_time__query_output.txt | 7 + ...agg_time_and_metric_time__query_output.txt | 7 + ...er_smaller_than_group_by__query_output.txt | 6 + ...ustom_granularity_filter__query_output.txt | 6 + ...y_filter_not_in_group_by__query_output.txt | 1005 ++++++++ ...nulls_with_0_metric_time__query_output.txt | 11 + ..._fill_nulls_with_0_month__query_output.txt | 29 + ...imple_join_to_time_spine__query_output.txt | 45 + .../test_cumulative_fill_nulls__plan0.sql | 384 ++++ ...cumulative_fill_nulls__plan0_optimized.sql | 34 + ...fill_nulls_for_one_input_metric__plan0.sql | 660 ++++++ ..._for_one_input_metric__plan0_optimized.sql | 87 + ...ine_with_filter_not_in_group_by__plan0.sql | 395 ++++ ...ilter_not_in_group_by__plan0_optimized.sql | 52 + ..._not_in_group_by_using_agg_time__plan0.sql | 397 ++++ ...oup_by_using_agg_time__plan0_optimized.sql | 54 + ..._using_agg_time_and_metric_time__plan0.sql | 395 ++++ ..._time_and_metric_time__plan0_optimized.sql | 52 + ...th_filter_smaller_than_group_by__plan0.sql | 672 ++++++ ...smaller_than_group_by__plan0_optimized.sql | 54 + ...join_to_time_spine_with_filters__plan0.sql | 525 +++++ ...me_spine_with_filters__plan0_optimized.sql | 67 + ...e_fill_nulls_with_0_metric_time__plan0.sql | 273 +++ ...ls_with_0_metric_time__plan0_optimized.sql | 39 + ..._simple_fill_nulls_with_0_month__plan0.sql | 275 +++ ...ll_nulls_with_0_month__plan0_optimized.sql | 49 + ...th_0_with_categorical_dimension__plan0.sql | 222 ++ ...categorical_dimension__plan0_optimized.sql | 28 + ...lls_with_0_with_non_metric_time__plan0.sql | 222 ++ ..._with_non_metric_time__plan0_optimized.sql | 28 + ...e_fill_nulls_without_time_spine__plan0.sql | 222 ++ ...ls_without_time_spine__plan0_optimized.sql | 28 + ...st_offset_window_with_date_part__plan0.sql | 610 +++++ ...window_with_date_part__plan0_optimized.sql | 63 + ...with_joined_sub_daily_dimension__plan0.sql | 1411 ++++++++++++ ...d_sub_daily_dimension__plan0_optimized.sql | 45 + ...metric_with_sub_daily_dimension__plan0.sql | 404 ++++ ...h_sub_daily_dimension__plan0_optimized.sql | 22 + ...est_simple_query_with_date_part__plan0.sql | 222 ++ ..._query_with_date_part__plan0_optimized.sql | 22 + ..._query_with_multiple_date_parts__plan0.sql | 250 ++ ...h_multiple_date_parts__plan0_optimized.sql | 45 + .../test_sub_daily_dimension__plan0.sql | 195 ++ ...t_sub_daily_dimension__plan0_optimized.sql | 12 + .../test_sub_daily_metric_time__plan0.sql | 66 + ...sub_daily_metric_time__plan0_optimized.sql | 13 + ...cumulative_grain_to_date_metric__plan0.sql | 608 +++++ ..._grain_to_date_metric__plan0_optimized.sql | 25 + ...bdaily_cumulative_window_metric__plan0.sql | 608 +++++ ...ulative_window_metric__plan0_optimized.sql | 25 + ...ides_metric_default_granularity__plan0.sql | 456 ++++ ...c_default_granularity__plan0_optimized.sql | 33 + ...daily_join_to_time_spine_metric__plan0.sql | 456 ++++ ..._to_time_spine_metric__plan0_optimized.sql | 33 + ...subdaily_offset_to_grain_metric__plan0.sql | 651 ++++++ ...ffset_to_grain_metric__plan0_optimized.sql | 34 + ...t_subdaily_offset_window_metric__plan0.sql | 651 ++++++ ..._offset_window_metric__plan0_optimized.sql | 34 + ...ily_time_constraint_with_metric__plan0.sql | 678 ++++++ ...onstraint_with_metric__plan0_optimized.sql | 47 + ...time_constraint_without_metrics__plan0.sql | 97 + ...raint_without_metrics__plan0_optimized.sql | 15 + ...h_metric_in_where_filter__query_output.txt | 11 + ...e_metric_in_where_filter__query_output.txt | 8 + ...values_query_with_metric_filter__plan0.sql | 270 +++ ...ry_with_metric_filter__plan0_optimized.sql | 46 + ...emantic_model_as_queried_metric__plan0.sql | 658 ++++++ ...del_as_queried_metric__plan0_optimized.sql | 58 + ...t_filter_with_conversion_metric__plan0.sql | 736 ++++++ ...ith_conversion_metric__plan0_optimized.sql | 123 + ...roup_by_has_local_entity_prefix__plan0.sql | 781 +++++++ ...s_local_entity_prefix__plan0_optimized.sql | 52 + .../test_inner_query_multi_hop__plan0.sql | 833 +++++++ ...inner_query_multi_hop__plan0_optimized.sql | 60 + .../test_inner_query_single_hop__plan0.sql | 380 +++ ...nner_query_single_hop__plan0_optimized.sql | 49 + .../test_metric_filtered_by_itself__plan0.sql | 658 ++++++ ...ic_filtered_by_itself__plan0_optimized.sql | 56 + ...ric_with_metric_in_where_filter__plan0.sql | 538 +++++ ...etric_in_where_filter__plan0_optimized.sql | 59 + ...mulative_metric_in_where_filter__plan0.sql | 410 ++++ ...etric_in_where_filter__plan0_optimized.sql | 50 + ..._derived_metric_in_where_filter__plan0.sql | 696 ++++++ ...etric_in_where_filter__plan0_optimized.sql | 88 + ...with_multiple_metrics_in_filter__plan0.sql | 765 ++++++ ...ple_metrics_in_filter__plan0_optimized.sql | 76 + ...th_ratio_metric_in_where_filter__plan0.sql | 773 +++++++ ...etric_in_where_filter__plan0_optimized.sql | 55 + ...h_simple_metric_in_where_filter__plan0.sql | 533 +++++ ...etric_in_where_filter__plan0_optimized.sql | 54 + ...orm_node_using_non_primary_time__plan0.sql | 189 ++ ...sing_non_primary_time__plan0_optimized.sql | 97 + ...ansform_node_using_primary_time__plan0.sql | 201 ++ ...de_using_primary_time__plan0_optimized.sql | 109 + ...uery_with_metric_time_dimension__plan0.sql | 445 ++++ ...metric_time_dimension__plan0_optimized.sql | 56 + ...dimensions_with_time_constraint__plan0.sql | 298 +++ ..._with_time_constraint__plan0_optimized.sql | 24 + .../test_metric_time_only__plan0.sql | 59 + ...test_metric_time_only__plan0_optimized.sql | 15 + .../test_metric_time_quarter_alone__plan0.sql | 57 + ...ic_time_quarter_alone__plan0_optimized.sql | 13 + ...tric_time_with_other_dimensions__plan0.sql | 234 ++ ...with_other_dimensions__plan0_optimized.sql | 22 + ...h_multiple_granularities__query_output.txt | 67 + ..._with_single_granularity__query_output.txt | 67 + ...conversion_metric_query_filters__plan0.sql | 734 ++++++ ..._metric_query_filters__plan0_optimized.sql | 180 ++ ..._metric_with_query_time_filters__plan0.sql | 694 ++++++ ...th_query_time_filters__plan0_optimized.sql | 46 + ...re_source_categorical_dimension__plan0.sql | 576 +++++ ...categorical_dimension__plan0_optimized.sql | 80 + ...spine_metric_predicate_pushdown__plan0.sql | 1438 ++++++++++++ ...ic_predicate_pushdown__plan0_optimized.sql | 172 ++ ...ic_time_filter_with_two_targets__plan0.sql | 580 +++++ ...lter_with_two_targets__plan0_optimized.sql | 42 + ..._categorical_dimension_pushdown__plan0.sql | 349 +++ ...al_dimension_pushdown__plan0_optimized.sql | 41 + ..._metric_with_query_time_filters__plan0.sql | 1334 +++++++++++ ...th_query_time_filters__plan0_optimized.sql | 126 + ...ry_with_metric_joins_and_filter__plan0.sql | 2041 +++++++++++++++++ ...tric_joins_and_filter__plan0_optimized.sql | 114 + ...ine_pushdown_filter_application__plan0.sql | 395 ++++ ...wn_filter_application__plan0_optimized.sql | 52 + ..._categorical_dimension_pushdown__plan0.sql | 577 +++++ ...al_dimension_pushdown__plan0_optimized.sql | 39 + .../test_skipped_pushdown__plan0.sql | 585 +++++ ...test_skipped_pushdown__plan0_optimized.sql | 45 + .../test_common_semantic_model__plan0.sql | 455 ++++ ...common_semantic_model__plan0_optimized.sql | 24 + .../test_distinct_values__plan0.sql | 144 ++ .../test_distinct_values__plan0_optimized.sql | 24 + ...th_where_constraint_on_join_dim__plan0.sql | 577 +++++ ...onstraint_on_join_dim__plan0_optimized.sql | 39 + .../test_join_to_scd_dimension__plan0.sql | 482 ++++ ...join_to_scd_dimension__plan0_optimized.sql | 37 + .../Clickhouse/test_limit_rows__plan0.sql | 232 ++ .../test_limit_rows__plan0_optimized.sql | 26 + ...al_dimension_using_local_entity__plan0.sql | 159 ++ ...on_using_local_entity__plan0_optimized.sql | 22 + .../test_measure_constraint__plan0.sql | 1392 +++++++++++ ...st_measure_constraint__plan0_optimized.sql | 75 + ..._constraint_with_reused_measure__plan0.sql | 566 +++++ ...t_with_reused_measure__plan0_optimized.sql | 68 + ...aint_with_single_expr_and_alias__plan0.sql | 333 +++ ...single_expr_and_alias__plan0_optimized.sql | 32 + ..._multiple_sources_no_dimensions__plan0.sql | 383 ++++ ...sources_no_dimensions__plan0_optimized.sql | 32 + .../test_min_max_metric_time__plan0.sql | 66 + ...t_min_max_metric_time__plan0_optimized.sql | 22 + .../test_min_max_metric_time_week__plan0.sql | 66 + ..._max_metric_time_week__plan0_optimized.sql | 22 + .../test_min_max_only_categorical__plan0.sql | 81 + ..._max_only_categorical__plan0_optimized.sql | 21 + .../test_min_max_only_time__plan0.sql | 113 + ...est_min_max_only_time__plan0_optimized.sql | 21 + .../test_min_max_only_time_quarter__plan0.sql | 113 + ...max_only_time_quarter__plan0_optimized.sql | 21 + ...multi_hop_through_scd_dimension__plan0.sql | 545 +++++ ...through_scd_dimension__plan0_optimized.sql | 44 + ...test_multi_hop_to_scd_dimension__plan0.sql | 522 +++++ ..._hop_to_scd_dimension__plan0_optimized.sql | 44 + .../Clickhouse/test_multihop_node__plan0.sql | 581 +++++ .../test_multihop_node__plan0_optimized.sql | 42 + ..._multiple_metrics_no_dimensions__plan0.sql | 554 +++++ ...metrics_no_dimensions__plan0_optimized.sql | 36 + ...imension_with_non_default_grain__plan0.sql | 277 +++ ...ith_non_default_grain__plan0_optimized.sql | 34 + .../test_partitioned_join__plan0.sql | 611 +++++ ...test_partitioned_join__plan0_optimized.sql | 34 + .../Clickhouse/test_id_enumeration__query.sql | 55 + .../Clickhouse/test_render_query__query0.sql | 22 + .../test_component_rendering__plan0.sql | 11 + .../test_component_rendering__plan1.sql | 13 + .../test_component_rendering__plan2.sql | 17 + .../test_component_rendering__plan3.sql | 21 + .../test_component_rendering__plan4.sql | 23 + .../test_component_rendering__plan5.sql | 24 + ...ender_create_table_as__create_table_as.sql | 12 + ...render_create_table_as__create_view_as.sql | 12 + .../Clickhouse/test_render_limit__plan0.sql | 10 + .../test_render_order_by__plan0.sql | 11 + .../Clickhouse/test_render_where__plan0.sql | 10 + ...e_with_input_measure_constraint__plan0.sql | 404 ++++ ...ut_measure_constraint__plan0_optimized.sql | 59 + ...ne_with_queried_time_constraint__plan0.sql | 405 ++++ ...eried_time_constraint__plan0_optimized.sql | 55 + .../test_simple_join_to_time_spine__plan0.sql | 273 +++ ...le_join_to_time_spine__plan0_optimized.sql | 33 + ..._join_to_time_spine_with_filter__plan0.sql | 379 +++ ...ime_spine_with_filter__plan0_optimized.sql | 44 + ..._time_spine_with_queried_filter__plan0.sql | 393 ++++ ...e_with_queried_filter__plan0_optimized.sql | 57 + tests_metricflow/source_schema_tools.py | 2 +- 450 files changed, 94686 insertions(+), 6 deletions(-) create mode 100644 local-data-warehouses/clickhouse/docker-compose.yaml create mode 100644 metricflow/sql/render/clickhouse.py create mode 100644 tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt create mode 100644 tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt create mode 100644 tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt create mode 100644 tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql create mode 100644 tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql create mode 100644 tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql create mode 100644 tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt create mode 100644 tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt create mode 100644 tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt create mode 100644 tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt create mode 100644 tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql create mode 100644 tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql create mode 100644 tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql create mode 100644 tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_metric_time__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_month__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql create mode 100644 tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql create mode 100644 tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt create mode 100644 tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_query_with_simple_metric_in_where_filter__query_output.txt create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql create mode 100644 tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_multiple_granularities__query_output.txt create mode 100644 tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_single_granularity__query_output.txt create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql create mode 100644 tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql create mode 100644 tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql create mode 100644 tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql create mode 100644 tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql create mode 100644 tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql diff --git a/.github/workflows/cd-sql-engine-tests.yaml b/.github/workflows/cd-sql-engine-tests.yaml index 6e5433d934..5b3219bc90 100644 --- a/.github/workflows/cd-sql-engine-tests.yaml +++ b/.github/workflows/cd-sql-engine-tests.yaml @@ -114,10 +114,39 @@ jobs: python-version: "3.12" make-target: "test-trino" + clickhouse-tests: + # Clickhouse tests run on a local service container, which obviates the need for separate Environment hosting. + # We run them here instead of in the CI unit test suite because they are a bit slower, and because in future + # we may choose to execute them against a hosted instance, at which point this config will look like the other + # engine configs in this file. + name: Clickhouse Tests + if: ${{ github.event.action != 'labeled' || github.event.label.name == 'Run Tests With Other SQL Engines' }} + runs-on: ubuntu-latest + services: + clickhouse: + image: clickhouse/clickhouse-server + ports: + - 8123:8123 + env: + CLICKHOUSE_USER: "metricflow" + CLICKHOUSE_PASSWORD: "metricflowing" + CLICKHOUSE_DB: "metricflow" + steps: + - name: Check-out the repo + uses: actions/checkout@v3 + + - name: Test w/ Python 3.12 + uses: ./.github/actions/run-mf-tests + with: + python-version: "3.12" + make-target: "test-clickhouse" + mf_sql_engine_url: "clickhouse://metricflow:metricflowing@localhost:8123/metricflow" + mf_sql_engine_password: "metricflowing" + remove-label: name: Remove Label After Running Tests runs-on: ubuntu-latest - needs: [ snowflake-tests, redshift-tests, bigquery-tests, databricks-tests ] + needs: [ snowflake-tests, redshift-tests, bigquery-tests, databricks-tests, clickhouse-tests ] # Default behavior for `needs` is that it requires success, so a success / failure needs to be specifically checked. if: ${{ (success() || failure()) && github.event.action == 'labeled' }} steps: diff --git a/Makefile b/Makefile index 519be637eb..0a48dd40c4 100644 --- a/Makefile +++ b/Makefile @@ -71,6 +71,10 @@ populate-persistent-source-schema-snowflake: test-trino: hatch -v run trino-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ +.PHONY: test-clickhouse +test-clickhouse: + hatch -v run clickhouse-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ + .PHONY: lint lint: hatch -v run dev-env:pre-commit run --all-files @@ -84,6 +88,10 @@ postgresql postgres: trino: make -C local-data-warehouses trino +.PHONY: clickhouse +clickhouse: + make -C local-data-warehouses clickhouse + # Re-generate test snapshots using all supported SQL engines. .PHONY: regenerate-test-snapshots regenerate-test-snapshots: diff --git a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py index 4650f94f30..89b1ad12f6 100644 --- a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py +++ b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py @@ -15,6 +15,7 @@ from metricflow.data_table.mf_table import MetricFlowDataTable from metricflow.protocols.sql_client import SqlEngine from metricflow.sql.render.big_query import BigQuerySqlQueryPlanRenderer +from metricflow.sql.render.clickhouse import ClickhouseSqlQueryPlanRenderer from metricflow.sql.render.databricks import DatabricksSqlQueryPlanRenderer from metricflow.sql.render.duckdb_renderer import DuckDbSqlQueryPlanRenderer from metricflow.sql.render.postgres import PostgresSQLSqlQueryPlanRenderer @@ -42,6 +43,7 @@ class SupportedAdapterTypes(enum.Enum): BIGQUERY = "bigquery" DUCKDB = "duckdb" TRINO = "trino" + CLICKHOUSE = "clickhouse" @property def sql_engine_type(self) -> SqlEngine: @@ -60,6 +62,8 @@ def sql_engine_type(self) -> SqlEngine: return SqlEngine.DUCKDB elif self is SupportedAdapterTypes.TRINO: return SqlEngine.TRINO + elif self is SupportedAdapterTypes.CLICKHOUSE: + return SqlEngine.CLICKHOUSE else: assert_values_exhausted(self) @@ -80,6 +84,8 @@ def sql_query_plan_renderer(self) -> SqlQueryPlanRenderer: return DuckDbSqlQueryPlanRenderer() elif self is SupportedAdapterTypes.TRINO: return TrinoSqlQueryPlanRenderer() + elif self is SupportedAdapterTypes.CLICKHOUSE: + return ClickhouseSqlQueryPlanRenderer() else: assert_values_exhausted(self) diff --git a/local-data-warehouses/Makefile b/local-data-warehouses/Makefile index 9987390bc8..56e8364fa3 100644 --- a/local-data-warehouses/Makefile +++ b/local-data-warehouses/Makefile @@ -9,3 +9,7 @@ postgresql: .PHONY: trino trino: docker-compose -f trino/docker-compose.yaml up + +.PHONY: clickhouse +clickhouse: + docker-compose -f clickhouse/docker-compose.yaml up diff --git a/local-data-warehouses/clickhouse/docker-compose.yaml b/local-data-warehouses/clickhouse/docker-compose.yaml new file mode 100644 index 0000000000..e46294a705 --- /dev/null +++ b/local-data-warehouses/clickhouse/docker-compose.yaml @@ -0,0 +1,16 @@ +version: "3.7" + +services: + clickhouse: + container_name: clickhouse + image: clickhouse + expose: + - "8123" + - "9000" + ports: + - "8123:8123" + - "9000:9000" + environment: + CLICKHOUSE_USER: "metricflow" + CLICKHOUSE_PASSWORD: "metricflowing" + CLICKHOUSE_DB: "metricflow" diff --git a/metricflow/protocols/sql_client.py b/metricflow/protocols/sql_client.py index 0feb327d16..00ddc749a5 100644 --- a/metricflow/protocols/sql_client.py +++ b/metricflow/protocols/sql_client.py @@ -25,6 +25,7 @@ class SqlEngine(Enum): SNOWFLAKE = "Snowflake" DATABRICKS = "Databricks" TRINO = "Trino" + CLICKHOUSE = "Clickhouse" @property def unsupported_granularities(self) -> Set[TimeGranularity]: @@ -49,6 +50,8 @@ def unsupported_granularities(self) -> Set[TimeGranularity]: return {TimeGranularity.NANOSECOND} elif self is SqlEngine.TRINO: return {TimeGranularity.NANOSECOND, TimeGranularity.MICROSECOND} + elif self is SqlEngine.CLICKHOUSE: + return set() # TODO: it looks like clickhouse supports nanoseconds (https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions#date_trunc) else: assert_values_exhausted(self) diff --git a/metricflow/sql/render/clickhouse.py b/metricflow/sql/render/clickhouse.py new file mode 100644 index 0000000000..e93be4ef11 --- /dev/null +++ b/metricflow/sql/render/clickhouse.py @@ -0,0 +1,276 @@ +from __future__ import annotations + +import textwrap +from typing import Collection, Optional, Sequence + +from dbt_semantic_interfaces.enum_extension import assert_values_exhausted +from dbt_semantic_interfaces.type_enums.date_part import DatePart +from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity + +from metricflow.sql.render.rendering_constants import SqlRenderingConstants +from metricflow.sql.sql_plan import SqlJoinDescription +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameterSet +from metricflow_semantics.sql.sql_exprs import ( + SqlAddTimeExpression, + SqlArithmeticExpression, + SqlArithmeticOperator, + SqlGenerateUuidExpression, + SqlIntegerExpression, + SqlPercentileExpression, + SqlPercentileFunctionType, + SqlSubtractTimeIntervalExpression, SqlExpressionNode, +) +from typing_extensions import override + +from metricflow.protocols.sql_client import SqlEngine +from metricflow.sql.render.expr_renderer import ( + DefaultSqlExpressionRenderer, + SqlExpressionRenderer, + SqlExpressionRenderResult, +) +from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlPlanRenderResult + + +class ClickhouseSqlExpressionRenderer(DefaultSqlExpressionRenderer): + """Expression renderer for the Clickhouse engine.""" + + __QUARTER_IN_MONTHS = 3 + + sql_engine = SqlEngine.CLICKHOUSE + + @property + @override + def double_data_type(self) -> str: + """Custom double data type for the Clickhouse engine.""" + return "DOUBLE PRECISION" + + @property + @override + def supported_percentile_function_types(self) -> Collection[SqlPercentileFunctionType]: + return { + SqlPercentileFunctionType.CONTINUOUS, + SqlPercentileFunctionType.DISCRETE, + SqlPercentileFunctionType.APPROXIMATE_CONTINUOUS, + } + + @override + def render_date_part(self, date_part: DatePart) -> str: + """Map DatePart enum to Clickhouse date/time function names.""" + if date_part is DatePart.DOW: + return "toDayOfWeek" # Returns 1-7 where Monday is 1 + elif date_part is DatePart.DOY: + return "toDayOfYear" + elif date_part is DatePart.MONTH: + return "toMonth" + elif date_part is DatePart.QUARTER: + return "toQuarter" + elif date_part is DatePart.YEAR: + return "toYear" + elif date_part is DatePart.DAY: + return "toDayOfMonth" + return assert_values_exhausted(date_part) + + @override + def visit_subtract_time_interval_expr(self, node: SqlSubtractTimeIntervalExpression) -> SqlExpressionRenderResult: + """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" + arg_rendered = node.arg.accept(self) + + count = node.count + granularity = node.granularity + if granularity is TimeGranularity.QUARTER: + granularity = TimeGranularity.MONTH + count *= self.__QUARTER_IN_MONTHS + + function_name = self.__get_function_operation_from_time_granularity(granularity) + + return SqlExpressionRenderResult( + sql=f"{function_name}({arg_rendered.sql}, CAST(-{count} AS Integer))", + bind_parameter_set=arg_rendered.bind_parameter_set, + ) + + @override + def visit_add_time_expr(self, node: SqlAddTimeExpression) -> SqlExpressionRenderResult: + """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" + granularity = node.granularity + count_expr = node.count_expr + if granularity is TimeGranularity.QUARTER: + granularity = TimeGranularity.MONTH + SqlArithmeticExpression.create( + left_expr=node.count_expr, + operator=SqlArithmeticOperator.MULTIPLY, + right_expr=SqlIntegerExpression.create(self.__QUARTER_IN_MONTHS), + ) # TODO: this is not correct, we need to multiply the count by the number of months in a quarter ? + + arg_rendered = node.arg.accept(self) + count_rendered = count_expr.accept(self) + count_sql = f"({count_rendered.sql})" if count_expr.requires_parenthesis else count_rendered.sql + + function_operation = self.__get_function_operation_from_time_granularity(granularity) + + return SqlExpressionRenderResult( + sql=f"{function_operation}({arg_rendered.sql}, CAST({count_sql} AS Integer))", + bind_parameter_set=SqlBindParameterSet.merge_iterable( + (arg_rendered.bind_parameter_set, count_rendered.bind_parameter_set) + ), + ) + + @override + def visit_generate_uuid_expr(self, node: SqlGenerateUuidExpression) -> SqlExpressionRenderResult: + return SqlExpressionRenderResult( + sql="generateUUIDv4()", + bind_parameter_set=SqlBindParameterSet(), + ) + + @override + def visit_percentile_expr(self, node: SqlPercentileExpression) -> SqlExpressionRenderResult: + """Render a percentile expression for Clickhouse.""" + arg_rendered = self.render_sql_expr(node.order_by_arg) + params = arg_rendered.bind_parameter_set + percentile = node.percentile_args.percentile + + if node.percentile_args.function_type is SqlPercentileFunctionType.CONTINUOUS: + function_str = "quantile" # Uses interpolation by default + elif node.percentile_args.function_type is SqlPercentileFunctionType.DISCRETE: + function_str = "quantileExact" # Exact calculation without interpolation + elif node.percentile_args.function_type is SqlPercentileFunctionType.APPROXIMATE_CONTINUOUS: + function_str = "quantile" # Default quantile is already approximate + elif node.percentile_args.function_type is SqlPercentileFunctionType.APPROXIMATE_DISCRETE: + raise UnsupportedEngineFeatureError( + "Approximate discrete percentile aggregate not supported for Clickhouse. Set " + + "use_approximate_percentile to false in all percentile measures." + ) + else: + assert_values_exhausted(node.percentile_args.function_type) + + # Clickhouse uses function(percentile)(expr) syntax instead of WITHIN GROUP + return SqlExpressionRenderResult( + sql=f"{function_str}({percentile})({arg_rendered.sql})", + bind_parameter_set=params, + ) + + def __get_function_operation_from_time_granularity(self, granularity: TimeGranularity) -> str: + return { + TimeGranularity.YEAR: "addYears", + TimeGranularity.QUARTER: "addMonths", + TimeGranularity.MONTH: "addMonths", + TimeGranularity.WEEK: "addWeeks", + TimeGranularity.DAY: "addDays", + TimeGranularity.HOUR: "addHours", + TimeGranularity.MINUTE: "addMinutes", + TimeGranularity.SECOND: "addSeconds", + }[granularity] + + +class ClickhouseSqlQueryPlanRenderer(DefaultSqlQueryPlanRenderer): + """Plan renderer for the Clickhouse engine.""" + + EXPR_RENDERER = ClickhouseSqlExpressionRenderer() + + @property + @override + def expr_renderer(self) -> SqlExpressionRenderer: + return self.EXPR_RENDERER + + @override + def _render_adapter_specific_flags(self) -> Optional[SqlPlanRenderResult]: + """Add ClickHouse-specific query settings.""" + settings = [ + "allow_experimental_join_condition = 1", + "allow_experimental_analyzer = 1", + "join_use_nulls = 0" + ] + return SqlPlanRenderResult( + sql=f"SETTINGS {', '.join(settings)}", + bind_parameter_set=SqlBindParameterSet() + ) + def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: + """Convert the join descriptions into a "JOIN" section with ClickHouse-specific handling.""" + if len(join_descriptions) == 0: + return None + + params = SqlBindParameterSet() + join_section_lines = [] + where_conditions = [] + + for join_description in join_descriptions: + right_source_rendered = self._render_node(join_description.right_source) + params = params.merge(right_source_rendered.bind_parameter_set) + + on_condition_rendered: Optional[SqlExpressionRenderResult] = None + if join_description.on_condition: + on_condition_rendered = self.EXPR_RENDERER.render_sql_expr(join_description.on_condition) + params = params.merge(on_condition_rendered.bind_parameter_set) + + # Check if this is a time-range join + is_time_range_join = False + if on_condition_rendered: + is_time_range_join = any(op in on_condition_rendered.sql for op in ['<=', '>=', '<', '>']) + + # Add join type + join_section_lines.append(join_description.join_type.value) + + # Add the source + if join_description.right_source.as_sql_table_node is not None: + join_section_lines.append( + textwrap.indent( + f"{right_source_rendered.sql} {join_description.right_source_alias}", + prefix=SqlRenderingConstants.INDENT, + ) + ) + else: + join_section_lines.append("(") + join_section_lines.append( + textwrap.indent(right_source_rendered.sql, prefix=SqlRenderingConstants.INDENT) + ) + join_section_lines.append(f") {join_description.right_source_alias}") + + # Add conditions + if is_time_range_join: + # For time-range joins, convert to CROSS JOIN + WHERE + join_section_lines[-len(join_section_lines)] = "CROSS JOIN" # Replace join type + if on_condition_rendered: + where_conditions.append(on_condition_rendered.sql) + else: + # For regular joins, use ON clause + if on_condition_rendered: + join_section_lines.append("ON") + join_section_lines.append( + textwrap.indent(on_condition_rendered.sql, prefix=SqlRenderingConstants.INDENT) + ) + + # Store where conditions for use in _render_where_section + if where_conditions: + self._stored_where_conditions = where_conditions + + return SqlPlanRenderResult("\n".join(join_section_lines), params) + +@override +def _render_where(self, where_expression: Optional[SqlExpressionNode]) -> Optional[SqlPlanRenderResult]: + """Override to combine stored where conditions from joins with the main where clause.""" + original_where = super()._render_where(where_expression) + stored_conditions = getattr(self, '_stored_where_conditions', []) + + if not stored_conditions and not original_where: + return None + + conditions = [] + + # Add original where condition if it exists + if original_where: + # Strip the "WHERE" prefix if it exists + where_sql = original_where.sql + if where_sql.upper().startswith('WHERE '): + where_sql = where_sql[6:] + conditions.append(where_sql) + + # Add stored conditions from joins + conditions.extend(stored_conditions) + + # Combine all conditions with AND + combined_sql = ' AND '.join(f'({condition})' for condition in conditions if condition.strip()) + + return SqlPlanRenderResult( + sql=f"WHERE {combined_sql}", + bind_parameter_set=original_where.bind_parameter_set if original_where else SqlBindParameterSet(), + ) \ No newline at end of file diff --git a/metricflow/sql/render/sql_plan_renderer.py b/metricflow/sql/render/sql_plan_renderer.py index 59e51cca82..040e2432e7 100644 --- a/metricflow/sql/render/sql_plan_renderer.py +++ b/metricflow/sql/render/sql_plan_renderer.py @@ -322,6 +322,9 @@ def _render_limit_section(self, limit_value: Optional[int]) -> Optional[SqlPlanR return None return SqlPlanRenderResult(sql=f"LIMIT {limit_value}", bind_parameter_set=SqlBindParameterSet()) + def _render_adapter_specific_flags(self) -> Optional[SqlPlanRenderResult]: + return None + def visit_select_statement_node(self, node: SqlSelectStatementNode) -> SqlPlanRenderResult: # noqa: D102 render_results = [ self._render_description_section(node.description), @@ -333,6 +336,7 @@ def visit_select_statement_node(self, node: SqlSelectStatementNode) -> SqlPlanRe self._render_group_by_section(node.group_bys), self._render_order_by_section(node.order_bys), self._render_limit_section(node.limit), + self._render_adapter_specific_flags(), ] valid_render_results = tuple(render_result for render_result in render_results if render_result is not None) diff --git a/pyproject.toml b/pyproject.toml index 9052923d95..28c3a399d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -162,6 +162,23 @@ template = "dev-env" extra-dependencies = ["trino>=0.328.0, <0.329.0", "dbt-trino>=1.8.0, <1.9.0"] +[tool.hatch.envs.clickhouse-env] +description = "Dev environment for working with Clickhouse adapter" +template = "dev-env" + +# Needed as dbt-clickhouse 1.8.7 depends on dbt-core~=1.8.0 while this uses dbt-core 1.10.0a1 +pre-install-commands = [ + "pip install 'dbt-core~=1.8.0' 'dbt-clickhouse==1.8.7'" +] + + +[tool.hatch.envs.clickhouse-env.env-vars] +PYTHONPATH="metricflow-semantics:dbt-metricflow" +MF_TEST_ADAPTER_TYPE = "clickhouse" +MF_SQL_ENGINE_URL = "clickhouse://localhost:8123" +DBT_ENV_SECRET_CATALOG="memory" + + [tool.black] line-length = 120 diff --git a/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml index 99316d5df8..690d8ed121 100644 --- a/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml +++ b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml @@ -78,3 +78,14 @@ trino: password: "{{ env_var('DBT_ENV_SECRET_PASSWORD') }}" catalog: "{{ env_var('DBT_ENV_SECRET_CATALOG') }}" schema: "{{ env_var('DBT_ENV_SECRET_SCHEMA') }}" +clickhouse: + target: dev + outputs: + dev: + type: clickhouse + host: "{{ env_var('DBT_ENV_SECRET_HOST') }}" + port: "{{ env_var('DBT_PROFILE_PORT') | int }}" + user: "{{ env_var('DBT_ENV_SECRET_USER') }}" + password: "{{ env_var('DBT_ENV_SECRET_PASSWORD') }}" + schema: "{{ env_var('DBT_ENV_SECRET_SCHEMA') }}" + secure: false diff --git a/tests_metricflow/fixtures/sql_client_fixtures.py b/tests_metricflow/fixtures/sql_client_fixtures.py index 242b9d68a1..83a1b88a18 100644 --- a/tests_metricflow/fixtures/sql_client_fixtures.py +++ b/tests_metricflow/fixtures/sql_client_fixtures.py @@ -174,6 +174,10 @@ def make_test_sql_client(url: str, password: str, schema: str) -> SqlClientWithD __configure_test_env_from_url(url, password=password, schema=schema) __initialize_dbt() return AdapterBackedDDLSqlClient(adapter=get_adapter_by_type("trino")) + elif dialect is SqlDialect.CLICKHOUSE: + __configure_test_env_from_url(url, password=password, schema=schema) + __initialize_dbt() + return AdapterBackedDDLSqlClient(adapter=get_adapter_by_type("clickhouse")) else: raise ValueError(f"Unknown dialect: `{dialect}` in URL {url}") diff --git a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py index 122dddc013..718b54d3b4 100644 --- a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py +++ b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py @@ -46,11 +46,17 @@ def create_table_from_data_table( # Format as "column_name column_type" columns_to_insert.append(f"{column_description.column_name} {self._get_sql_type(column_description)}") + create_table_statement = f"CREATE TABLE IF NOT EXISTS {sql_table.sql} ({', '.join(columns_to_insert)})" + + if self.sql_engine_type == SqlEngine.CLICKHOUSE: + create_table_statement = f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(" ")[0]})" + self._adapter.execute( - f"CREATE TABLE IF NOT EXISTS {sql_table.sql} ({', '.join(columns_to_insert)})", + create_table_statement, auto_begin=True, fetch=False, ) + self._adapter.commit_if_has_connection() # Insert rows @@ -132,8 +138,14 @@ def _quote_escape_value(self, value: str) -> str: def create_schema(self, schema_name: str) -> None: """Create the given schema in a data warehouse. Only used in tutorials and tests.""" - self.execute(f"CREATE SCHEMA IF NOT EXISTS {schema_name}") + if self.sql_engine_type is SqlEngine.CLICKHOUSE: + self.execute(f"CREATE DATABASE IF NOT EXISTS {schema_name}") + else: + self.execute(f"CREATE SCHEMA IF NOT EXISTS {schema_name}") def drop_schema(self, schema_name: str, cascade: bool = True) -> None: """Drop the given schema from the data warehouse. Only used in tests.""" - self.execute(f"DROP SCHEMA IF EXISTS {schema_name}{' CASCADE' if cascade else ''}") + if self.sql_engine_type is SqlEngine.CLICKHOUSE: + self.execute(f"DROP DATABASE IF EXISTS {schema_name}") + else: + self.execute(f"DROP SCHEMA IF EXISTS {schema_name}{' CASCADE' if cascade else ''}") diff --git a/tests_metricflow/fixtures/sql_clients/common_client.py b/tests_metricflow/fixtures/sql_clients/common_client.py index ddda32aea8..3703b85f30 100644 --- a/tests_metricflow/fixtures/sql_clients/common_client.py +++ b/tests_metricflow/fixtures/sql_clients/common_client.py @@ -15,6 +15,7 @@ class SqlDialect(ExtendedEnum): BIGQUERY = "bigquery" DATABRICKS = "databricks" TRINO = "trino" + CLICKHOUSE = "clickhouse" T = TypeVar("T") diff --git a/tests_metricflow/generate_snapshots.py b/tests_metricflow/generate_snapshots.py index ef2dd38c47..2b6ef1b3a9 100644 --- a/tests_metricflow/generate_snapshots.py +++ b/tests_metricflow/generate_snapshots.py @@ -2,7 +2,7 @@ Credentials are stored as a JSON string in an environment variable set via a shell command like: -export MF_TEST_ENGINE_CREDENTIALS=$(cat < Sequence[MetricFlowEngineConfiguration]: # noqa: D102 @@ -109,6 +114,10 @@ def as_configurations(self) -> Sequence[MetricFlowEngineConfiguration]: # noqa: engine=SqlEngine.TRINO, credential_set=self.trino, ), + MetricFlowEngineConfiguration( + engine=SqlEngine.CLICKHOUSE, + credential_set=self.clickhouse, + ), ) @@ -154,6 +163,7 @@ def run_tests(test_configuration: MetricFlowEngineConfiguration) -> None: # noq or test_configuration.engine is SqlEngine.DATABRICKS or test_configuration.engine is SqlEngine.POSTGRES or test_configuration.engine is SqlEngine.TRINO + or test_configuration.engine is SqlEngine.CLICKHOUSE ): engine_name = test_configuration.engine.value.lower() os.environ["MF_TEST_ADAPTER_TYPE"] = engine_name diff --git a/tests_metricflow/populate_persistent_source_schemas.py b/tests_metricflow/populate_persistent_source_schemas.py index f2afed86c7..8bb9c85fa1 100644 --- a/tests_metricflow/populate_persistent_source_schemas.py +++ b/tests_metricflow/populate_persistent_source_schemas.py @@ -30,6 +30,7 @@ def populate_schemas(test_configuration: MetricFlowEngineConfiguration) -> None: or test_configuration.engine is SqlEngine.DATABRICKS or test_configuration.engine is SqlEngine.REDSHIFT or test_configuration.engine is SqlEngine.TRINO + or test_configuration.engine is SqlEngine.CLICKHOUSE ): engine_name = test_configuration.engine.value.lower() os.environ["MF_TEST_ADAPTER_TYPE"] = engine_name diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt new file mode 100644 index 0000000000..12a7d2327f --- /dev/null +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt @@ -0,0 +1,54 @@ +test_name: test_saved_query +test_filename: test_cli.py +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By ['metric_time__day', 'listing__capacity_latest'] +SELECT + metric_time__day + , listing__capacity_latest + , SUM(bookings) AS bookings + , SUM(instant_bookings) AS instant_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_10000.capacity AS listing__capacity_latest + , subq_1.metric_time__day AS metric_time__day + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_10000 + ON + subq_1.listing = listings_latest_src_10000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +WHERE listing__capacity_latest > 3 +GROUP BY + metric_time__day + , listing__capacity_latest +ORDER BY metric_time__day, listing__capacity_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +metric_time__day listing__capacity_latest bookings instant_bookings +------------------- -------------------------- ---------- ------------------ +2019-12-01T00:00:00 5 1 0 +2019-12-18T00:00:00 4 4 2 +2019-12-19T00:00:00 4 6 6 +2019-12-19T00:00:00 5 2 0 +2019-12-20T00:00:00 5 2 0 +2020-01-01T00:00:00 4 2 1 +2020-01-02T00:00:00 4 3 3 +2020-01-02T00:00:00 5 1 0 +2020-01-03T00:00:00 5 1 0 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt new file mode 100644 index 0000000000..f4f63c8416 --- /dev/null +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt @@ -0,0 +1,40 @@ +test_name: test_saved_query_with_cumulative_metric +test_filename: test_cli.py +--- +-- Join Self Over Time Range +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] +-- Pass Only Elements: ['txn_revenue', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By ['metric_time__day'] +SELECT + subq_3.metric_time__day AS metric_time__day + , SUM(subq_2.txn_revenue) AS trailing_2_months_revenue +FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine subq_4 + WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +CROSS JOIN +( + -- Read Elements From Semantic Model 'revenue' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , revenue AS txn_revenue + FROM ***************************.fct_revenue revenue_src_10000 + WHERE DATE_TRUNC('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +WHERE subq_3.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' +GROUP BY + subq_3.metric_time__day +ORDER BY metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +metric_time__day trailing_2_months_revenue +------------------- --------------------------- +2020-01-01T00:00:00 1000 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt new file mode 100644 index 0000000000..eb0196495f --- /dev/null +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt @@ -0,0 +1,49 @@ +test_name: test_saved_query_with_limit +test_filename: test_cli.py +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By ['metric_time__day', 'listing__capacity_latest'] Limit 3 +SELECT + metric_time__day + , listing__capacity_latest + , SUM(bookings) AS bookings + , SUM(instant_bookings) AS instant_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_10000.capacity AS listing__capacity_latest + , subq_1.metric_time__day AS metric_time__day + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_10000 + ON + subq_1.listing = listings_latest_src_10000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +WHERE listing__capacity_latest > 3 +GROUP BY + metric_time__day + , listing__capacity_latest +ORDER BY metric_time__day, listing__capacity_latest +LIMIT 3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +metric_time__day listing__capacity_latest bookings instant_bookings +------------------- -------------------------- ---------- ------------------ +2019-12-01T00:00:00 5 1 0 +2019-12-18T00:00:00 4 4 2 +2019-12-19T00:00:00 4 6 6 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt new file mode 100644 index 0000000000..7b139fba5d --- /dev/null +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt @@ -0,0 +1,50 @@ +test_name: test_saved_query_with_where +test_filename: test_cli.py +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By ['metric_time__day', 'listing__capacity_latest'] +SELECT + metric_time__day + , listing__capacity_latest + , SUM(bookings) AS bookings + , SUM(instant_bookings) AS instant_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_10000.capacity AS listing__capacity_latest + , subq_1.metric_time__day AS metric_time__day + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_10000 + ON + subq_1.listing = listings_latest_src_10000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +WHERE (listing__capacity_latest > 3) AND (listing__capacity_latest > 4) +GROUP BY + metric_time__day + , listing__capacity_latest +ORDER BY metric_time__day, listing__capacity_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +metric_time__day listing__capacity_latest bookings instant_bookings +------------------- -------------------------- ---------- ------------------ +2019-12-01T00:00:00 5 1 0 +2019-12-19T00:00:00 5 2 0 +2019-12-20T00:00:00 5 2 0 +2020-01-02T00:00:00 5 1 0 +2020-01-03T00:00:00 5 1 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql new file mode 100644 index 0000000000..2e88dc45ab --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql @@ -0,0 +1,523 @@ +test_name: test_conversion_metric +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__day + , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) AS metric_time__day + , MAX(subq_4.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_14.metric_time__day + , SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'metric_time__day'] + SELECT + subq_13.metric_time__day + , subq_13.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.visit__ds__day + , subq_5.visit__ds__week + , subq_5.visit__ds__month + , subq_5.visit__ds__quarter + , subq_5.visit__ds__year + , subq_5.visit__ds__extract_year + , subq_5.visit__ds__extract_quarter + , subq_5.visit__ds__extract_month + , subq_5.visit__ds__extract_day + , subq_5.visit__ds__extract_dow + , subq_5.visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user + , subq_5.session + , subq_5.visit__user + , subq_5.visit__session + , subq_5.referrer_id + , subq_5.visit__referrer_id + , subq_5.visits + , subq_5.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_4.metric_time__day = subq_15.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql new file mode 100644 index 0000000000..20488af9e8 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql @@ -0,0 +1,130 @@ +test_name: test_conversion_metric +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , MAX(subq_21.visits) AS visits + , MAX(subq_31.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__day = '2020-01-01' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_22.user + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_21.metric_time__day = subq_31.metric_time__day + GROUP BY + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql new file mode 100644 index 0000000000..73850cdf0c --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql @@ -0,0 +1,546 @@ +test_name: test_conversion_metric_with_categorical_filter +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__day + , subq_16.visit__referrer_id + , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) AS metric_time__day + , COALESCE(subq_4.visit__referrer_id, subq_15.visit__referrer_id) AS visit__referrer_id + , MAX(subq_4.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , subq_3.visit__referrer_id + , SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.visit__referrer_id + , subq_2.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + , subq_3.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_14.metric_time__day + , subq_14.visit__referrer_id + , SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_13.metric_time__day + , subq_13.visit__referrer_id + , subq_13.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.visit__referrer_id + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.visit__referrer_id) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visit__referrer_id + , subq_7.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.visit__ds__day + , subq_5.visit__ds__week + , subq_5.visit__ds__month + , subq_5.visit__ds__quarter + , subq_5.visit__ds__year + , subq_5.visit__ds__extract_year + , subq_5.visit__ds__extract_quarter + , subq_5.visit__ds__extract_month + , subq_5.visit__ds__extract_day + , subq_5.visit__ds__extract_dow + , subq_5.visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user + , subq_5.session + , subq_5.visit__user + , subq_5.visit__session + , subq_5.referrer_id + , subq_5.visit__referrer_id + , subq_5.visits + , subq_5.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.metric_time__day + , subq_14.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + ( + subq_4.visit__referrer_id = subq_15.visit__referrer_id + ) AND ( + subq_4.metric_time__day = subq_15.metric_time__day + ) + GROUP BY + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) + , COALESCE(subq_4.visit__referrer_id, subq_15.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql new file mode 100644 index 0000000000..9b5cd97221 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql @@ -0,0 +1,153 @@ +test_name: test_conversion_metric_with_categorical_filter +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , COALESCE(subq_21.visit__referrer_id, subq_31.visit__referrer_id) AS visit__referrer_id + , MAX(subq_21.visits) AS visits + , MAX(subq_31.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visit__referrer_id + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE visit__referrer_id = 'ref_id_01' + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.visit__referrer_id) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_22.user + , visit__referrer_id + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visit__referrer_id + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + ( + subq_21.visit__referrer_id = subq_31.visit__referrer_id + ) AND ( + subq_21.metric_time__day = subq_31.metric_time__day + ) + GROUP BY + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) + , COALESCE(subq_21.visit__referrer_id, subq_31.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql new file mode 100644 index 0000000000..77b12514b7 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql @@ -0,0 +1,403 @@ +test_name: test_conversion_metric_with_different_time_dimension_grains +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + CAST(subq_14.buys_month AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_with_monthly_conversion +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_3.visits) AS visits + , MAX(subq_13.buys_month) AS buys_month + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_12.buys_month) AS buys_month + FROM ( + -- Pass Only Elements: ['buys_month',] + SELECT + subq_11.buys_month + FROM ( + -- Find conversions for user within the range of 1 month + SELECT + subq_10.metric_time__month + , subq_10.user + , subq_10.buys_month + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__month + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.metric_time__month) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__month + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__month + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__month + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys_month AS buys_month + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__month', 'user'] + SELECT + subq_5.metric_time__month + , subq_5.user + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys_month + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds_month' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds_month__month AS metric_time__month + , subq_7.ds_month__quarter AS metric_time__quarter + , subq_7.ds_month__year AS metric_time__year + , subq_7.ds_month__extract_year AS metric_time__extract_year + , subq_7.ds_month__extract_quarter AS metric_time__extract_quarter + , subq_7.ds_month__extract_month AS metric_time__extract_month + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys_month + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql new file mode 100644 index 0000000000..eaf2248a0b --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql @@ -0,0 +1,85 @@ +test_name: test_conversion_metric_with_different_time_dimension_grains +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('month', ds) AS metric_time__month + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + CAST(MAX(subq_27.buys_month) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_18.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_with_monthly_conversion +FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +CROSS JOIN +( + -- Find conversions for user within the range of 1 month + -- Pass Only Elements: ['buys_month',] + -- Aggregate Measures + SELECT + SUM(buys_month) AS buys_month + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__month + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.metric_time__month) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__month + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__month + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__month + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__month DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys_month AS buys_month + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds_month' + -- Add column with generated UUID + SELECT + DATE_TRUNC('month', ds_month) AS metric_time__month + , user_id AS user + , 1 AS buys_month + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql new file mode 100644 index 0000000000..3b7ccf1992 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql @@ -0,0 +1,509 @@ +test_name: test_conversion_metric_with_filter +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_4.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_2.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys',] + SELECT + subq_13.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.visit__ds__day + , subq_5.visit__ds__week + , subq_5.visit__ds__month + , subq_5.visit__ds__quarter + , subq_5.visit__ds__year + , subq_5.visit__ds__extract_year + , subq_5.visit__ds__extract_quarter + , subq_5.visit__ds__extract_month + , subq_5.visit__ds__extract_day + , subq_5.visit__ds__extract_dow + , subq_5.visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user + , subq_5.session + , subq_5.visit__user + , subq_5.visit__session + , subq_5.referrer_id + , subq_5.visit__referrer_id + , subq_5.visits + , subq_5.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql new file mode 100644 index 0000000000..6cda118b57 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql @@ -0,0 +1,112 @@ +test_name: test_conversion_metric_with_filter +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + CAST(MAX(subq_31.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_21.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +CROSS JOIN +( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys',] + -- Aggregate Measures + SELECT + SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_22.user + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_31 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql new file mode 100644 index 0000000000..a62e54ad16 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql @@ -0,0 +1,519 @@ +test_name: test_conversion_metric_with_filter_not_in_group_by +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.buys AS visit_buy_conversions +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_4.visits) AS visits + , COALESCE(MAX(subq_15.buys), 0) AS buys + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_2.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys',] + SELECT + subq_13.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.visit__referrer_id + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.visit__referrer_id) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visit__referrer_id + , subq_7.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.visit__ds__day + , subq_5.visit__ds__week + , subq_5.visit__ds__month + , subq_5.visit__ds__quarter + , subq_5.visit__ds__year + , subq_5.visit__ds__extract_year + , subq_5.visit__ds__extract_quarter + , subq_5.visit__ds__extract_month + , subq_5.visit__ds__extract_day + , subq_5.visit__ds__extract_dow + , subq_5.visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user + , subq_5.session + , subq_5.visit__user + , subq_5.visit__session + , subq_5.referrer_id + , subq_5.visit__referrer_id + , subq_5.visits + , subq_5.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..20def8aa35 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql @@ -0,0 +1,124 @@ +test_name: test_conversion_metric_with_filter_not_in_group_by +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(MAX(subq_31.buys), 0) AS visit_buy_conversions +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visit__referrer_id + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +CROSS JOIN +( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys',] + -- Aggregate Measures + SELECT + SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.visit__referrer_id) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_22.user + , visit__referrer_id + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visit__referrer_id + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_31 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..c3f1d639b2 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql @@ -0,0 +1,627 @@ +test_name: test_conversion_metric_with_time_constraint +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a time constraint and categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.visit__referrer_id + , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) AS visit__referrer_id + , MAX(subq_5.visits) AS visits + , MAX(subq_17.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_4.visit__referrer_id + , SUM(subq_4.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id'] + SELECT + subq_3.visit__referrer_id + , subq_3.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.visit__ds__day + , subq_2.visit__ds__week + , subq_2.visit__ds__month + , subq_2.visit__ds__quarter + , subq_2.visit__ds__year + , subq_2.visit__ds__extract_year + , subq_2.visit__ds__extract_quarter + , subq_2.visit__ds__extract_month + , subq_2.visit__ds__extract_day + , subq_2.visit__ds__extract_dow + , subq_2.visit__ds__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.user + , subq_2.session + , subq_2.visit__user + , subq_2.visit__session + , subq_2.referrer_id + , subq_2.visit__referrer_id + , subq_2.visits + , subq_2.visitors + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_16.visit__referrer_id + , SUM(subq_16.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id'] + SELECT + subq_15.visit__referrer_id + , subq_15.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_14.metric_time__day + , subq_14.user + , subq_14.visit__referrer_id + , subq_14.buys + , subq_14.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_10.visits) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_10.visit__referrer_id) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_10.metric_time__day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_10.user) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_13.mf_internal_uuid AS mf_internal_uuid + , subq_13.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_9.metric_time__day + , subq_9.user + , subq_9.visit__referrer_id + , subq_9.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.visit__ds__day + , subq_7.visit__ds__week + , subq_7.visit__ds__month + , subq_7.visit__ds__quarter + , subq_7.visit__ds__year + , subq_7.visit__ds__extract_year + , subq_7.visit__ds__extract_quarter + , subq_7.visit__ds__extract_month + , subq_7.visit__ds__extract_day + , subq_7.visit__ds__extract_dow + , subq_7.visit__ds__extract_doy + , subq_7.metric_time__day + , subq_7.metric_time__week + , subq_7.metric_time__month + , subq_7.metric_time__quarter + , subq_7.metric_time__year + , subq_7.metric_time__extract_year + , subq_7.metric_time__extract_quarter + , subq_7.metric_time__extract_month + , subq_7.metric_time__extract_day + , subq_7.metric_time__extract_dow + , subq_7.metric_time__extract_doy + , subq_7.user + , subq_7.session + , subq_7.visit__user + , subq_7.visit__session + , subq_7.referrer_id + , subq_7.visit__referrer_id + , subq_7.visits + , subq_7.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_month__month + , subq_12.ds_month__quarter + , subq_12.ds_month__year + , subq_12.ds_month__extract_year + , subq_12.ds_month__extract_quarter + , subq_12.ds_month__extract_month + , subq_12.buy__ds__day + , subq_12.buy__ds__week + , subq_12.buy__ds__month + , subq_12.buy__ds__quarter + , subq_12.buy__ds__year + , subq_12.buy__ds__extract_year + , subq_12.buy__ds__extract_quarter + , subq_12.buy__ds__extract_month + , subq_12.buy__ds__extract_day + , subq_12.buy__ds__extract_dow + , subq_12.buy__ds__extract_doy + , subq_12.buy__ds_month__month + , subq_12.buy__ds_month__quarter + , subq_12.buy__ds_month__year + , subq_12.buy__ds_month__extract_year + , subq_12.buy__ds_month__extract_quarter + , subq_12.buy__ds_month__extract_month + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session_id + , subq_12.buy__user + , subq_12.buy__session_id + , subq_12.buys + , subq_12.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_month__month + , subq_11.ds_month__quarter + , subq_11.ds_month__year + , subq_11.ds_month__extract_year + , subq_11.ds_month__extract_quarter + , subq_11.ds_month__extract_month + , subq_11.buy__ds__day + , subq_11.buy__ds__week + , subq_11.buy__ds__month + , subq_11.buy__ds__quarter + , subq_11.buy__ds__year + , subq_11.buy__ds__extract_year + , subq_11.buy__ds__extract_quarter + , subq_11.buy__ds__extract_month + , subq_11.buy__ds__extract_day + , subq_11.buy__ds__extract_dow + , subq_11.buy__ds__extract_doy + , subq_11.buy__ds_month__month + , subq_11.buy__ds_month__quarter + , subq_11.buy__ds_month__year + , subq_11.buy__ds_month__extract_year + , subq_11.buy__ds_month__extract_quarter + , subq_11.buy__ds_month__extract_month + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.user + , subq_11.session_id + , subq_11.buy__user + , subq_11.buy__session_id + , subq_11.buys + , subq_11.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + subq_16.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_5.visit__referrer_id = subq_17.visit__referrer_id + GROUP BY + COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..2ce4e69c78 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,144 @@ +test_name: test_conversion_metric_with_time_constraint +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a time constraint and categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH ctr_0_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) AS visit__referrer_id + , MAX(subq_24.visits) AS visits + , MAX(subq_34.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id'] + -- Aggregate Measures + SELECT + visit__referrer_id + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=ctr_0 + SELECT + metric_time__day + , ctr_0_cte.user + , visit__referrer_id + , visits + FROM ctr_0_cte ctr_0_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + WHERE visit__referrer_id = 'ref_id_01' + GROUP BY + visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys', 'visit__referrer_id'] + -- Aggregate Measures + SELECT + visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_27.visits) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_27.visit__referrer_id) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_27.metric_time__day) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_27.user) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_30.mf_internal_uuid AS mf_internal_uuid + , subq_30.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_25.user + , visit__referrer_id + , visits + FROM ( + -- Read From CTE For node_id=ctr_0 + SELECT + metric_time__day + , ctr_0_cte.user + , visit__referrer_id + , visits + FROM ctr_0_cte ctr_0_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + GROUP BY + visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + ON + subq_24.visit__referrer_id = subq_34.visit__referrer_id + GROUP BY + COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_35 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql new file mode 100644 index 0000000000..12bfeaee5a --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql @@ -0,0 +1,523 @@ +test_name: test_conversion_metric_with_window +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a window. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__day + , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) AS metric_time__day + , MAX(subq_4.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_14.metric_time__day + , SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'metric_time__day'] + SELECT + subq_13.metric_time__day + , subq_13.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.visit__ds__day + , subq_5.visit__ds__week + , subq_5.visit__ds__month + , subq_5.visit__ds__quarter + , subq_5.visit__ds__year + , subq_5.visit__ds__extract_year + , subq_5.visit__ds__extract_quarter + , subq_5.visit__ds__extract_month + , subq_5.visit__ds__extract_day + , subq_5.visit__ds__extract_dow + , subq_5.visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user + , subq_5.session + , subq_5.visit__user + , subq_5.visit__session + , subq_5.referrer_id + , subq_5.visit__referrer_id + , subq_5.visits + , subq_5.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_4.metric_time__day = subq_15.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql new file mode 100644 index 0000000000..1b68e9dad5 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql @@ -0,0 +1,130 @@ +test_name: test_conversion_metric_with_window +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a window. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , MAX(subq_21.visits) AS visits + , MAX(subq_31.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__day = '2020-01-01' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_22.user + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + SELECT + metric_time__day + , sma_28019_cte.user + , visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_21.metric_time__day = subq_31.metric_time__day + GROUP BY + COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql new file mode 100644 index 0000000000..ffcc07c274 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql @@ -0,0 +1,640 @@ +test_name: test_conversion_metric_with_window_and_time_constraint +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a window, time constraint, and categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day + , subq_18.visit__referrer_id + , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.metric_time__day, subq_17.metric_time__day) AS metric_time__day + , COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) AS visit__referrer_id + , MAX(subq_5.visits) AS visits + , MAX(subq_17.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_4.metric_time__day + , subq_4.visit__referrer_id + , SUM(subq_4.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_3.metric_time__day + , subq_3.visit__referrer_id + , subq_3.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.visit__ds__day + , subq_2.visit__ds__week + , subq_2.visit__ds__month + , subq_2.visit__ds__quarter + , subq_2.visit__ds__year + , subq_2.visit__ds__extract_year + , subq_2.visit__ds__extract_quarter + , subq_2.visit__ds__extract_month + , subq_2.visit__ds__extract_day + , subq_2.visit__ds__extract_dow + , subq_2.visit__ds__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.user + , subq_2.session + , subq_2.visit__user + , subq_2.visit__session + , subq_2.referrer_id + , subq_2.visit__referrer_id + , subq_2.visits + , subq_2.visitors + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.visit__ds__day + , subq_1.visit__ds__week + , subq_1.visit__ds__month + , subq_1.visit__ds__quarter + , subq_1.visit__ds__year + , subq_1.visit__ds__extract_year + , subq_1.visit__ds__extract_quarter + , subq_1.visit__ds__extract_month + , subq_1.visit__ds__extract_day + , subq_1.visit__ds__extract_dow + , subq_1.visit__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.session + , subq_1.visit__user + , subq_1.visit__session + , subq_1.referrer_id + , subq_1.visit__referrer_id + , subq_1.visits + , subq_1.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__day + , subq_4.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_16.metric_time__day + , subq_16.visit__referrer_id + , SUM(subq_16.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_15.metric_time__day + , subq_15.visit__referrer_id + , subq_15.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_14.metric_time__day + , subq_14.user + , subq_14.visit__referrer_id + , subq_14.buys + , subq_14.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_10.visits) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_10.visit__referrer_id) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_10.metric_time__day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_10.user) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_13.mf_internal_uuid AS mf_internal_uuid + , subq_13.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_9.metric_time__day + , subq_9.user + , subq_9.visit__referrer_id + , subq_9.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.visit__ds__day + , subq_7.visit__ds__week + , subq_7.visit__ds__month + , subq_7.visit__ds__quarter + , subq_7.visit__ds__year + , subq_7.visit__ds__extract_year + , subq_7.visit__ds__extract_quarter + , subq_7.visit__ds__extract_month + , subq_7.visit__ds__extract_day + , subq_7.visit__ds__extract_dow + , subq_7.visit__ds__extract_doy + , subq_7.metric_time__day + , subq_7.metric_time__week + , subq_7.metric_time__month + , subq_7.metric_time__quarter + , subq_7.metric_time__year + , subq_7.metric_time__extract_year + , subq_7.metric_time__extract_quarter + , subq_7.metric_time__extract_month + , subq_7.metric_time__extract_day + , subq_7.metric_time__extract_dow + , subq_7.metric_time__extract_doy + , subq_7.user + , subq_7.session + , subq_7.visit__user + , subq_7.visit__session + , subq_7.referrer_id + , subq_7.visit__referrer_id + , subq_7.visits + , subq_7.visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_month__month + , subq_12.ds_month__quarter + , subq_12.ds_month__year + , subq_12.ds_month__extract_year + , subq_12.ds_month__extract_quarter + , subq_12.ds_month__extract_month + , subq_12.buy__ds__day + , subq_12.buy__ds__week + , subq_12.buy__ds__month + , subq_12.buy__ds__quarter + , subq_12.buy__ds__year + , subq_12.buy__ds__extract_year + , subq_12.buy__ds__extract_quarter + , subq_12.buy__ds__extract_month + , subq_12.buy__ds__extract_day + , subq_12.buy__ds__extract_dow + , subq_12.buy__ds__extract_doy + , subq_12.buy__ds_month__month + , subq_12.buy__ds_month__quarter + , subq_12.buy__ds_month__year + , subq_12.buy__ds_month__extract_year + , subq_12.buy__ds_month__extract_quarter + , subq_12.buy__ds_month__extract_month + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session_id + , subq_12.buy__user + , subq_12.buy__session_id + , subq_12.buys + , subq_12.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_month__month + , subq_11.ds_month__quarter + , subq_11.ds_month__year + , subq_11.ds_month__extract_year + , subq_11.ds_month__extract_quarter + , subq_11.ds_month__extract_month + , subq_11.buy__ds__day + , subq_11.buy__ds__week + , subq_11.buy__ds__month + , subq_11.buy__ds__quarter + , subq_11.buy__ds__year + , subq_11.buy__ds__extract_year + , subq_11.buy__ds__extract_quarter + , subq_11.buy__ds__extract_month + , subq_11.buy__ds__extract_day + , subq_11.buy__ds__extract_dow + , subq_11.buy__ds__extract_doy + , subq_11.buy__ds_month__month + , subq_11.buy__ds_month__quarter + , subq_11.buy__ds_month__year + , subq_11.buy__ds_month__extract_year + , subq_11.buy__ds_month__extract_quarter + , subq_11.buy__ds_month__extract_month + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.user + , subq_11.session_id + , subq_11.buy__user + , subq_11.buy__session_id + , subq_11.buys + , subq_11.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + subq_16.metric_time__day + , subq_16.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + ( + subq_5.visit__referrer_id = subq_17.visit__referrer_id + ) AND ( + subq_5.metric_time__day = subq_17.metric_time__day + ) + GROUP BY + COALESCE(subq_5.metric_time__day, subq_17.metric_time__day) + , COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..51e935b77c --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql @@ -0,0 +1,155 @@ +test_name: test_conversion_metric_with_window_and_time_constraint +test_filename: test_conversion_metric_rendering.py +docstring: + Test rendering a query against a conversion metric with a window, time constraint, and categorical filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH ctr_0_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_24.metric_time__day, subq_34.metric_time__day) AS metric_time__day + , COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) AS visit__referrer_id + , MAX(subq_24.visits) AS visits + , MAX(subq_34.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=ctr_0 + SELECT + metric_time__day + , ctr_0_cte.user + , visit__referrer_id + , visits + FROM ctr_0_cte ctr_0_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + WHERE visit__referrer_id = 'ref_id_01' + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_27.visits) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_27.visit__referrer_id) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_27.metric_time__day) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_27.user) OVER ( + PARTITION BY + subq_30.user + , subq_30.metric_time__day + , subq_30.mf_internal_uuid + ORDER BY subq_27.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_30.mf_internal_uuid AS mf_internal_uuid + , subq_30.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_25.user + , visit__referrer_id + , visits + FROM ( + -- Read From CTE For node_id=ctr_0 + SELECT + metric_time__day + , ctr_0_cte.user + , visit__referrer_id + , visits + FROM ctr_0_cte ctr_0_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + WHERE visit__referrer_id = 'ref_id_01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + ON + ( + subq_24.visit__referrer_id = subq_34.visit__referrer_id + ) AND ( + subq_24.metric_time__day = subq_34.metric_time__day + ) + GROUP BY + COALESCE(subq_24.metric_time__day, subq_34.metric_time__day) + , COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_35 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt new file mode 100644 index 0000000000..66e37990fb --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt @@ -0,0 +1,15 @@ +test_name: test_conversion_metric +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric. +--- +metric_time__day visit_buy_conversion_rate +------------------- --------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 0 +2020-01-03T00:00:00 0 +2020-01-04T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 0 +2020-01-10T00:00:00 0 +2020-01-12T00:00:00 8 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt new file mode 100644 index 0000000000..53d048bce9 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt @@ -0,0 +1,10 @@ +test_name: test_conversion_metric_with_categorical_filter +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a categorical filter. +--- +metric_time__day visit__referrer_id visit_buy_conversion_rate +------------------- -------------------- --------------------------- +2020-01-01T00:00:00 fb_ad_1 0 +2020-01-02T00:00:00 fb_ad_1 0 +2020-01-03T00:00:00 fb_ad_1 8 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__query_output.txt new file mode 100644 index 0000000000..1bb9f58bb1 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_conversion_metric_with_different_time_dimension_grains +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a filter that doesn't exist in group by. +--- + visit_buy_conversion_rate_with_monthly_conversion +--------------------------------------------------- + 0.5 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt new file mode 100644 index 0000000000..34dad5b64b --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_conversion_metric_with_filter_not_in_group_by +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a filter that doesn't exist in group by. +--- + visit_buy_conversions +----------------------- + 8 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt new file mode 100644 index 0000000000..e9d0b38559 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_conversion_metric_with_time_constraint +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a time constraint and categorical filter. +--- +visit__referrer_id visit_buy_conversion_rate +-------------------- --------------------------- +fb_ad_1 4 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt new file mode 100644 index 0000000000..fd1fc6226e --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt @@ -0,0 +1,15 @@ +test_name: test_conversion_metric_with_window +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a window. +--- +metric_time__day visit_buy_conversion_rate_7days +------------------- --------------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 0 +2020-01-03T00:00:00 0 +2020-01-04T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 0 +2020-01-10T00:00:00 0 +2020-01-12T00:00:00 8 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt new file mode 100644 index 0000000000..5815927b22 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt @@ -0,0 +1,9 @@ +test_name: test_conversion_metric_with_window_and_time_constraint +test_filename: test_conversion_metrics.py +docstring: + Test query against a conversion metric with a window, time constraint, and categorical filter. +--- +metric_time__day visit__referrer_id visit_buy_conversion_rate_7days +------------------- -------------------- --------------------------------- +2020-01-01T00:00:00 fb_ad_1 0 +2020-01-02T00:00:00 fb_ad_1 8 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql new file mode 100644 index 0000000000..24d1412402 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql @@ -0,0 +1,415 @@ +test_name: test_conversion_count_with_no_group_by +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with no group by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.buys AS visit_buy_conversions +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_3.visits) AS visits + , COALESCE(MAX(subq_13.buys), 0) AS buys + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_12.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys',] + SELECT + subq_11.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_10.metric_time__day + , subq_10.user + , subq_10.buys + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.metric_time__day) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_5.metric_time__day + , subq_5.user + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys + , subq_8.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys + , subq_7.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..e247568a4e --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql @@ -0,0 +1,85 @@ +test_name: test_conversion_count_with_no_group_by +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with no group by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(MAX(subq_27.buys), 0) AS visit_buy_conversions +FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +CROSS JOIN +( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys',] + -- Aggregate Measures + SELECT + SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql new file mode 100644 index 0000000000..8f78f83177 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql @@ -0,0 +1,531 @@ +test_name: test_conversion_metric_join_to_timespine_and_fill_nulls_with_0 +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric that joins to time spine and fills nulls with 0. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_22.metric_time__day + , CAST(subq_22.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_22.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , COALESCE(MAX(subq_7.visits), 0) AS visits + , COALESCE(MAX(subq_21.buys), 0) AS buys + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__day AS metric_time__day + , subq_3.visits AS visits + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_5.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_4.ds__day AS metric_time__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__day = subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + SELECT + subq_20.metric_time__day AS metric_time__day + , subq_17.buys AS buys + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_19.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_18.ds__day AS metric_time__day + , subq_18.ds__week + , subq_18.ds__month + , subq_18.ds__quarter + , subq_18.ds__year + , subq_18.ds__extract_year + , subq_18.ds__extract_quarter + , subq_18.ds__extract_month + , subq_18.ds__extract_day + , subq_18.ds__extract_dow + , subq_18.ds__extract_doy + , subq_18.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_16.metric_time__day + , SUM(subq_16.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'metric_time__day'] + SELECT + subq_15.metric_time__day + , subq_15.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_14.metric_time__day + , subq_14.user + , subq_14.buys + , subq_14.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_10.visits) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_10.metric_time__day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_10.user) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_13.mf_internal_uuid AS mf_internal_uuid + , subq_13.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_9.metric_time__day + , subq_9.user + , subq_9.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.ds__day AS metric_time__day + , subq_8.ds__week AS metric_time__week + , subq_8.ds__month AS metric_time__month + , subq_8.ds__quarter AS metric_time__quarter + , subq_8.ds__year AS metric_time__year + , subq_8.ds__extract_year AS metric_time__extract_year + , subq_8.ds__extract_quarter AS metric_time__extract_quarter + , subq_8.ds__extract_month AS metric_time__extract_month + , subq_8.ds__extract_day AS metric_time__extract_day + , subq_8.ds__extract_dow AS metric_time__extract_dow + , subq_8.ds__extract_doy AS metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_month__month + , subq_12.ds_month__quarter + , subq_12.ds_month__year + , subq_12.ds_month__extract_year + , subq_12.ds_month__extract_quarter + , subq_12.ds_month__extract_month + , subq_12.buy__ds__day + , subq_12.buy__ds__week + , subq_12.buy__ds__month + , subq_12.buy__ds__quarter + , subq_12.buy__ds__year + , subq_12.buy__ds__extract_year + , subq_12.buy__ds__extract_quarter + , subq_12.buy__ds__extract_month + , subq_12.buy__ds__extract_day + , subq_12.buy__ds__extract_dow + , subq_12.buy__ds__extract_doy + , subq_12.buy__ds_month__month + , subq_12.buy__ds_month__quarter + , subq_12.buy__ds_month__year + , subq_12.buy__ds_month__extract_year + , subq_12.buy__ds_month__extract_quarter + , subq_12.buy__ds_month__extract_month + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session_id + , subq_12.buy__user + , subq_12.buy__session_id + , subq_12.buys + , subq_12.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_month__month + , subq_11.ds_month__quarter + , subq_11.ds_month__year + , subq_11.ds_month__extract_year + , subq_11.ds_month__extract_quarter + , subq_11.ds_month__extract_month + , subq_11.buy__ds__day + , subq_11.buy__ds__week + , subq_11.buy__ds__month + , subq_11.buy__ds__quarter + , subq_11.buy__ds__year + , subq_11.buy__ds__extract_year + , subq_11.buy__ds__extract_quarter + , subq_11.buy__ds__extract_month + , subq_11.buy__ds__extract_day + , subq_11.buy__ds__extract_dow + , subq_11.buy__ds__extract_doy + , subq_11.buy__ds_month__month + , subq_11.buy__ds_month__quarter + , subq_11.buy__ds_month__year + , subq_11.buy__ds_month__extract_year + , subq_11.buy__ds_month__extract_quarter + , subq_11.buy__ds_month__extract_month + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.user + , subq_11.session_id + , subq_11.buy__user + , subq_11.buy__session_id + , subq_11.buys + , subq_11.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + subq_16.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_20.metric_time__day = subq_17.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + subq_7.metric_time__day = subq_21.metric_time__day + GROUP BY + COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql new file mode 100644 index 0000000000..14683068c5 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql @@ -0,0 +1,133 @@ +test_name: test_conversion_metric_join_to_timespine_and_fill_nulls_with_0 +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric that joins to time spine and fills nulls with 0. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) AS metric_time__day + , COALESCE(MAX(subq_30.visits), 0) AS visits + , COALESCE(MAX(subq_43.buys), 0) AS buys + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_26.visits AS visits + FROM rss_28018_cte rss_28018_cte + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + ON + rss_28018_cte.ds__day = subq_26.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_39.buys AS buys + FROM rss_28018_cte rss_28018_cte + LEFT OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_35.user + , subq_35.metric_time__day + , subq_35.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_35.user + , subq_35.metric_time__day + , subq_35.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_35.user + , subq_35.metric_time__day + , subq_35.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_35.mf_internal_uuid AS mf_internal_uuid + , subq_35.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_36 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_39 + ON + rss_28018_cte.ds__day = subq_39.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_43 + ON + subq_30.metric_time__day = subq_43.metric_time__day + GROUP BY + COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_44 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql new file mode 100644 index 0000000000..5c6806f1cb --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql @@ -0,0 +1,439 @@ +test_name: test_conversion_rate +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.visit__referrer_id + , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) AS visit__referrer_id + , MAX(subq_3.visits) AS visits + , MAX(subq_13.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_2.visit__referrer_id + , SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id'] + SELECT + subq_1.visit__referrer_id + , subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_12.visit__referrer_id + , SUM(subq_12.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id'] + SELECT + subq_11.visit__referrer_id + , subq_11.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_10.metric_time__day + , subq_10.user + , subq_10.visit__referrer_id + , subq_10.buys + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.visit__referrer_id) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_6.metric_time__day) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_5.metric_time__day + , subq_5.user + , subq_5.visit__referrer_id + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys + , subq_8.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys + , subq_7.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + subq_12.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_3.visit__referrer_id = subq_13.visit__referrer_id + GROUP BY + COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql new file mode 100644 index 0000000000..76a7bd37f4 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql @@ -0,0 +1,112 @@ +test_name: test_conversion_rate +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) AS visit__referrer_id + , MAX(subq_18.visits) AS visits + , MAX(subq_27.buys) AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits', 'visit__referrer_id'] + -- Aggregate Measures + SELECT + visit__referrer_id + , SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + GROUP BY + visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys', 'visit__referrer_id'] + -- Aggregate Measures + SELECT + visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.visit__referrer_id) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + GROUP BY + visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_18.visit__referrer_id = subq_27.visit__referrer_id + GROUP BY + COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql new file mode 100644 index 0000000000..5d14a4d603 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql @@ -0,0 +1,467 @@ +test_name: test_conversion_rate_with_constant_properties +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with constant properties by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , subq_14.visit__referrer_id + , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_by_session +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) AS metric_time__day + , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) AS visit__referrer_id + , MAX(subq_3.visits) AS visits + , MAX(subq_13.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , subq_2.visit__referrer_id + , SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.visit__referrer_id + , subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + , subq_2.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_12.metric_time__day + , subq_12.visit__referrer_id + , SUM(subq_12.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_11.metric_time__day + , subq_11.visit__referrer_id + , subq_11.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_10.metric_time__day + , subq_10.user + , subq_10.session + , subq_10.visit__referrer_id + , subq_10.buys + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + , subq_9.session_id + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.visit__referrer_id) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + , subq_9.session_id + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_6.metric_time__day) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + , subq_9.session_id + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + , subq_9.session_id + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , FIRST_VALUE(subq_6.session) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + , subq_9.session_id + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS session + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user', 'session'] + SELECT + subq_5.metric_time__day + , subq_5.user + , subq_5.session + , subq_5.visit__referrer_id + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys + , subq_8.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys + , subq_7.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + subq_12.metric_time__day + , subq_12.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + ( + subq_3.visit__referrer_id = subq_13.visit__referrer_id + ) AND ( + subq_3.metric_time__day = subq_13.metric_time__day + ) + GROUP BY + COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) + , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql new file mode 100644 index 0000000000..73962ebb79 --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql @@ -0,0 +1,138 @@ +test_name: test_conversion_rate_with_constant_properties +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with constant properties by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , session_id AS session + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_by_session +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) AS metric_time__day + , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) AS visit__referrer_id + , MAX(subq_18.visits) AS visits + , MAX(subq_27.buys) AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + , subq_23.session_id + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.visit__referrer_id) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + , subq_23.session_id + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + , subq_23.session_id + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + , subq_23.session_id + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , FIRST_VALUE(sma_28019_cte.session) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + , subq_23.session_id + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS session + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , session_id + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + ( + subq_18.visit__referrer_id = subq_27.visit__referrer_id + ) AND ( + subq_18.metric_time__day = subq_27.metric_time__day + ) + GROUP BY + COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) + , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql new file mode 100644 index 0000000000..513be5435d --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql @@ -0,0 +1,415 @@ +test_name: test_conversion_rate_with_no_group_by +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with no group by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_3.visits) AS visits + , MAX(subq_13.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_12.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys',] + SELECT + subq_11.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_10.metric_time__day + , subq_10.user + , subq_10.buys + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.metric_time__day) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_5.metric_time__day + , subq_5.user + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys + , subq_8.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys + , subq_7.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..350b2e846d --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql @@ -0,0 +1,85 @@ +test_name: test_conversion_rate_with_no_group_by +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with no group by data flow plan rendering. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + CAST(MAX(subq_27.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_18.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +CROSS JOIN +( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys',] + -- Aggregate Measures + SELECT + SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql new file mode 100644 index 0000000000..e5f047e55a --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql @@ -0,0 +1,452 @@ +test_name: test_conversion_rate_with_window +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with a window data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , subq_14.visit__referrer_id + , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) AS metric_time__day + , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) AS visit__referrer_id + , MAX(subq_3.visits) AS visits + , MAX(subq_13.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , subq_2.visit__referrer_id + , SUM(subq_2.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.visit__referrer_id + , subq_1.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + , subq_2.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_12.metric_time__day + , subq_12.visit__referrer_id + , SUM(subq_12.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + SELECT + subq_11.metric_time__day + , subq_11.visit__referrer_id + , subq_11.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_10.metric_time__day + , subq_10.user + , subq_10.visit__referrer_id + , subq_10.buys + , subq_10.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_6.visits) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_6.visit__referrer_id) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_6.metric_time__day) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_6.user) OVER ( + PARTITION BY + subq_9.user + , subq_9.metric_time__day + , subq_9.mf_internal_uuid + ORDER BY subq_6.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_9.mf_internal_uuid AS mf_internal_uuid + , subq_9.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day', 'user'] + SELECT + subq_5.metric_time__day + , subq_5.user + , subq_5.visit__referrer_id + , subq_5.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.visits + , subq_4.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_month__month + , subq_8.ds_month__quarter + , subq_8.ds_month__year + , subq_8.ds_month__extract_year + , subq_8.ds_month__extract_quarter + , subq_8.ds_month__extract_month + , subq_8.buy__ds__day + , subq_8.buy__ds__week + , subq_8.buy__ds__month + , subq_8.buy__ds__quarter + , subq_8.buy__ds__year + , subq_8.buy__ds__extract_year + , subq_8.buy__ds__extract_quarter + , subq_8.buy__ds__extract_month + , subq_8.buy__ds__extract_day + , subq_8.buy__ds__extract_dow + , subq_8.buy__ds__extract_doy + , subq_8.buy__ds_month__month + , subq_8.buy__ds_month__quarter + , subq_8.buy__ds_month__year + , subq_8.buy__ds_month__extract_year + , subq_8.buy__ds_month__extract_quarter + , subq_8.buy__ds_month__extract_month + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session_id + , subq_8.buy__user + , subq_8.buy__session_id + , subq_8.buys + , subq_8.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_month__month + , subq_7.ds_month__quarter + , subq_7.ds_month__year + , subq_7.ds_month__extract_year + , subq_7.ds_month__extract_quarter + , subq_7.ds_month__extract_month + , subq_7.buy__ds__day + , subq_7.buy__ds__week + , subq_7.buy__ds__month + , subq_7.buy__ds__quarter + , subq_7.buy__ds__year + , subq_7.buy__ds__extract_year + , subq_7.buy__ds__extract_quarter + , subq_7.buy__ds__extract_month + , subq_7.buy__ds__extract_day + , subq_7.buy__ds__extract_dow + , subq_7.buy__ds__extract_doy + , subq_7.buy__ds_month__month + , subq_7.buy__ds_month__quarter + , subq_7.buy__ds_month__year + , subq_7.buy__ds_month__extract_year + , subq_7.buy__ds_month__extract_quarter + , subq_7.buy__ds_month__extract_month + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.user + , subq_7.session_id + , subq_7.buy__user + , subq_7.buy__session_id + , subq_7.buys + , subq_7.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + subq_12.metric_time__day + , subq_12.visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + ( + subq_3.visit__referrer_id = subq_13.visit__referrer_id + ) AND ( + subq_3.metric_time__day = subq_13.metric_time__day + ) + GROUP BY + COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) + , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql new file mode 100644 index 0000000000..d3ea6b40fd --- /dev/null +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql @@ -0,0 +1,123 @@ +test_name: test_conversion_rate_with_window +test_filename: test_conversion_metrics_to_sql.py +docstring: + Test conversion metric with a window data flow plan rendering. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , visit__referrer_id AS visit__referrer_id + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) AS metric_time__day + , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) AS visit__referrer_id + , MAX(subq_18.visits) AS visits + , MAX(subq_27.buys) AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , visit__referrer_id + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.visit__referrer_id) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_23.user + , subq_23.metric_time__day + , subq_23.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_23.mf_internal_uuid AS mf_internal_uuid + , subq_23.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + GROUP BY + metric_time__day + , visit__referrer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + ( + subq_18.visit__referrer_id = subq_27.visit__referrer_id + ) AND ( + subq_18.metric_time__day = subq_27.metric_time__day + ) + GROUP BY + COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) + , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql new file mode 100644 index 0000000000..fc84cba822 --- /dev/null +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql @@ -0,0 +1,33 @@ +test_name: test_convert_query_semantic_model +test_filename: test_convert_semantic_model.py +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'revenue' +SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user +FROM ***************************.fct_revenue revenue_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql new file mode 100644 index 0000000000..a7ef1aa1e4 --- /dev/null +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql @@ -0,0 +1,63 @@ +test_name: test_convert_table_semantic_model_with_measures +test_filename: test_convert_semantic_model.py +docstring: + Complete test of table semantic model conversion. This includes the full set of measures/entities/dimensions. + + Measures trigger a primary time dimension validation. Additionally, this includes both categorical and time + dimension types, which should cover most, if not all, of the table source branches in the target class. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'id_verifications' +SELECT + 1 AS identity_verifications + , DATE_TRUNC('day', id_verifications_src_28000.ds) AS ds__day + , DATE_TRUNC('week', id_verifications_src_28000.ds) AS ds__week + , DATE_TRUNC('month', id_verifications_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , id_verifications_src_28000.verification_type + , DATE_TRUNC('day', id_verifications_src_28000.ds) AS verification__ds__day + , DATE_TRUNC('week', id_verifications_src_28000.ds) AS verification__ds__week + , DATE_TRUNC('month', id_verifications_src_28000.ds) AS verification__ds__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds) AS verification__ds__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS verification__ds__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS verification__ds__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_doy + , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day + , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week + , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy + , id_verifications_src_28000.verification_type AS verification__verification_type + , id_verifications_src_28000.verification_id AS verification + , id_verifications_src_28000.user_id AS user + , id_verifications_src_28000.user_id AS verification__user +FROM ***************************.fct_id_verifications id_verifications_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql new file mode 100644 index 0000000000..d89704acd6 --- /dev/null +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql @@ -0,0 +1,35 @@ +test_name: test_convert_table_semantic_model_without_measures +test_filename: test_convert_semantic_model.py +docstring: + Simple test for converting a table semantic model. Since there are no measures, primary time is not checked. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'users_latest' +SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user +FROM ***************************.dim_users_latest users_latest_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql new file mode 100644 index 0000000000..394d63db82 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql @@ -0,0 +1,186 @@ +test_name: test_all_time_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative all-time metric queried with non-default grains. + + Uses only metric_time. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_8.metric_time__week + , subq_8.metric_time__quarter + , subq_8.revenue_all_time +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.metric_time__week + , subq_7.metric_time__quarter + , LAST_VALUE(subq_7.revenue_all_time) OVER ( + PARTITION BY + subq_7.metric_time__week + , subq_7.metric_time__quarter + ORDER BY subq_7.metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_all_time + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.metric_time__quarter + , subq_6.txn_revenue AS revenue_all_time + FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__quarter + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__quarter', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__quarter + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__week AS metric_time__week + , subq_2.metric_time__quarter AS metric_time__quarter + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + , DATE_TRUNC('quarter', subq_3.ds) AS metric_time__quarter + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__quarter + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.metric_time__week + , subq_8.metric_time__quarter + , subq_8.revenue_all_time +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql new file mode 100644 index 0000000000..f63e711786 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql @@ -0,0 +1,51 @@ +test_name: test_all_time_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative all-time metric queried with non-default grains. + + Uses only metric_time. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + metric_time__week + , metric_time__quarter + , revenue_all_time +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + metric_time__week + , metric_time__quarter + , LAST_VALUE(revenue_all_time) OVER ( + PARTITION BY + metric_time__week + , metric_time__quarter + ORDER BY metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_all_time + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__quarter', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_12.ds AS metric_time__day + , DATE_TRUNC('week', subq_12.ds) AS metric_time__week + , DATE_TRUNC('quarter', subq_12.ds) AS metric_time__quarter + , SUM(revenue_src_28000.revenue) AS revenue_all_time + FROM ***************************.mf_time_spine subq_12 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + subq_12.ds + , DATE_TRUNC('week', subq_12.ds) + , DATE_TRUNC('quarter', subq_12.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +GROUP BY + metric_time__week + , metric_time__quarter + , revenue_all_time +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql new file mode 100644 index 0000000000..49e0cdfed5 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql @@ -0,0 +1,99 @@ +test_name: test_cumulative_metric +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a basic cumulative metric query. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.ds__day + , subq_3.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_2.ds__day + , SUM(subq_2.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'ds__day'] + SELECT + subq_1.ds__day + , subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql new file mode 100644 index 0000000000..5e9aa03e78 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql @@ -0,0 +1,18 @@ +test_name: test_cumulative_metric +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a basic cumulative metric query. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'revenue' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['txn_revenue', 'ds__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + DATE_TRUNC('day', created_at) AS ds__day + , SUM(revenue) AS trailing_2_months_revenue +FROM ***************************.fct_revenue revenue_src_28000 +GROUP BY + DATE_TRUNC('day', created_at) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql new file mode 100644 index 0000000000..c1b1e53199 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql @@ -0,0 +1,99 @@ +test_name: test_cumulative_metric_grain_to_date +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query against a grain_to_date cumulative metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.ds__month + , subq_3.txn_revenue AS revenue_mtd +FROM ( + -- Aggregate Measures + SELECT + subq_2.ds__month + , SUM(subq_2.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'ds__month'] + SELECT + subq_1.ds__month + , subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.ds__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql new file mode 100644 index 0000000000..24a861dcd3 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql @@ -0,0 +1,18 @@ +test_name: test_cumulative_metric_grain_to_date +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query against a grain_to_date cumulative metric. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'revenue' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['txn_revenue', 'ds__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + DATE_TRUNC('month', created_at) AS ds__month + , SUM(revenue) AS revenue_mtd +FROM ***************************.fct_revenue revenue_src_28000 +GROUP BY + DATE_TRUNC('month', created_at) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql new file mode 100644 index 0000000000..7a532f4a9e --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql @@ -0,0 +1,94 @@ +test_name: test_cumulative_metric_no_ds +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric with no time dimension specified. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_2.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue',] + SELECT + subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql new file mode 100644 index 0000000000..475e6f4686 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql @@ -0,0 +1,15 @@ +test_name: test_cumulative_metric_no_ds +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric with no time dimension specified. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'revenue' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['txn_revenue',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(revenue) AS trailing_2_months_revenue +FROM ***************************.fct_revenue revenue_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql new file mode 100644 index 0000000000..e158e52a7d --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql @@ -0,0 +1,99 @@ +test_name: test_cumulative_metric_no_window +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query where there is a windowless cumulative metric to compute. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.ds__month + , subq_3.txn_revenue AS revenue_all_time +FROM ( + -- Aggregate Measures + SELECT + subq_2.ds__month + , SUM(subq_2.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'ds__month'] + SELECT + subq_1.ds__month + , subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.ds__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql new file mode 100644 index 0000000000..c656da3f1a --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql @@ -0,0 +1,18 @@ +test_name: test_cumulative_metric_no_window +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query where there is a windowless cumulative metric to compute. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'revenue' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['txn_revenue', 'ds__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + DATE_TRUNC('month', created_at) AS ds__month + , SUM(revenue) AS revenue_all_time +FROM ***************************.fct_revenue revenue_src_28000 +GROUP BY + DATE_TRUNC('month', created_at) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..65f0a3c8da --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql @@ -0,0 +1,233 @@ +test_name: test_cumulative_metric_no_window_with_time_constraint +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a windowless cumulative metric query with an adjustable time constraint. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__day + , subq_8.txn_revenue AS revenue_all_time +FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.txn_revenue + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.revenue_instance__ds__day + , subq_5.revenue_instance__ds__week + , subq_5.revenue_instance__ds__month + , subq_5.revenue_instance__ds__quarter + , subq_5.revenue_instance__ds__year + , subq_5.revenue_instance__ds__extract_year + , subq_5.revenue_instance__ds__extract_quarter + , subq_5.revenue_instance__ds__extract_month + , subq_5.revenue_instance__ds__extract_day + , subq_5.revenue_instance__ds__extract_dow + , subq_5.revenue_instance__ds__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.user + , subq_5.revenue_instance__user + , subq_5.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_3.metric_time__day AS metric_time__day + , subq_2.ds__day AS ds__day + , subq_2.ds__week AS ds__week + , subq_2.ds__month AS ds__month + , subq_2.ds__quarter AS ds__quarter + , subq_2.ds__year AS ds__year + , subq_2.ds__extract_year AS ds__extract_year + , subq_2.ds__extract_quarter AS ds__extract_quarter + , subq_2.ds__extract_month AS ds__extract_month + , subq_2.ds__extract_day AS ds__extract_day + , subq_2.ds__extract_dow AS ds__extract_dow + , subq_2.ds__extract_doy AS ds__extract_doy + , subq_2.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_2.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_2.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_2.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_2.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_2.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_2.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_2.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_2.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_2.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_2.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_2.metric_time__week AS metric_time__week + , subq_2.metric_time__month AS metric_time__month + , subq_2.metric_time__quarter AS metric_time__quarter + , subq_2.metric_time__year AS metric_time__year + , subq_2.metric_time__extract_year AS metric_time__extract_year + , subq_2.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_2.metric_time__extract_month AS metric_time__extract_month + , subq_2.metric_time__extract_day AS metric_time__extract_day + , subq_2.metric_time__extract_dow AS metric_time__extract_dow + , subq_2.metric_time__extract_doy AS metric_time__extract_doy + , subq_2.user AS user + , subq_2.revenue_instance__user AS revenue_instance__user + , subq_2.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_4.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_4 + WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + CROSS JOIN + ( + -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.revenue_instance__ds__day + , subq_1.revenue_instance__ds__week + , subq_1.revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.revenue_instance__user + , subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2000-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..998ca4d065 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,38 @@ +test_name: test_cumulative_metric_no_window_with_time_constraint +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a windowless cumulative metric query with an adjustable time constraint. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] +-- Pass Only Elements: ['txn_revenue', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_12.metric_time__day AS metric_time__day + , SUM(subq_11.txn_revenue) AS revenue_all_time +FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine subq_13 + WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +CROSS JOIN +( + -- Read Elements From Semantic Model 'revenue' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , revenue AS txn_revenue + FROM ***************************.fct_revenue revenue_src_28000 + WHERE DATE_TRUNC('day', created_at) BETWEEN '2000-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' +GROUP BY + subq_12.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql new file mode 100644 index 0000000000..87cd0ddb58 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql @@ -0,0 +1,153 @@ +test_name: test_cumulative_metric_with_agg_time_and_metric_time +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with one agg time dimension and one metric time dimension. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.revenue_instance__ds__month + , subq_6.metric_time__day + , subq_6.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_5.revenue_instance__ds__month + , subq_5.metric_time__day + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__day', 'revenue_instance__ds__month'] + SELECT + subq_4.revenue_instance__ds__month + , subq_4.metric_time__day + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + DATE_TRUNC('month', subq_3.ds) AS revenue_instance__ds__month + , subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.revenue_instance__ds__month + , subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..a6aba9a4f4 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_cumulative_metric_with_agg_time_and_metric_time +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with one agg time dimension and one metric time dimension. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['txn_revenue', 'metric_time__day', 'revenue_instance__ds__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + DATE_TRUNC('month', subq_10.ds) AS revenue_instance__ds__month + , subq_10.ds AS metric_time__day + , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue +FROM ***************************.mf_time_spine subq_10 +CROSS JOIN + ***************************.fct_revenue revenue_src_28000 +GROUP BY + DATE_TRUNC('month', subq_10.ds) + , subq_10.ds +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql new file mode 100644 index 0000000000..c56b34987f --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql @@ -0,0 +1,148 @@ +test_name: test_cumulative_metric_with_agg_time_dimension +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with agg time dimension. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.revenue_instance__ds__day + , subq_6.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_5.revenue_instance__ds__day + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__day'] + SELECT + subq_4.revenue_instance__ds__day + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS revenue_instance__ds__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.revenue_instance__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..8b7479cafb --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql @@ -0,0 +1,19 @@ +test_name: test_cumulative_metric_with_agg_time_dimension +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with agg time dimension. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_10.ds AS revenue_instance__ds__day + , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue +FROM ***************************.mf_time_spine subq_10 +CROSS JOIN + ***************************.fct_revenue revenue_src_28000 +GROUP BY + subq_10.ds +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql new file mode 100644 index 0000000000..2b86d0317f --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql @@ -0,0 +1,153 @@ +test_name: test_cumulative_metric_with_multiple_agg_time_dimensions +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with multiple agg time dimensions. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.revenue_instance__ds__day + , subq_6.revenue_instance__ds__month + , subq_6.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_5.revenue_instance__ds__day + , subq_5.revenue_instance__ds__month + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__day', 'revenue_instance__ds__month'] + SELECT + subq_4.revenue_instance__ds__day + , subq_4.revenue_instance__ds__month + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_2.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS revenue_instance__ds__day + , DATE_TRUNC('month', subq_3.ds) AS revenue_instance__ds__month + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.revenue_instance__ds__day + , subq_5.revenue_instance__ds__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql new file mode 100644 index 0000000000..0ceb3156b6 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_cumulative_metric_with_multiple_agg_time_dimensions +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with multiple agg time dimensions. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__day', 'revenue_instance__ds__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_10.ds AS revenue_instance__ds__day + , DATE_TRUNC('month', subq_10.ds) AS revenue_instance__ds__month + , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue +FROM ***************************.mf_time_spine subq_10 +CROSS JOIN + ***************************.fct_revenue revenue_src_28000 +GROUP BY + subq_10.ds + , DATE_TRUNC('month', subq_10.ds) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql new file mode 100644 index 0000000000..21e81efd3e --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql @@ -0,0 +1,153 @@ +test_name: test_cumulative_metric_with_multiple_metric_time_dimensions +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with multiple metric time dimensions. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__month + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__day', 'metric_time__month'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__month + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__month AS metric_time__month + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('month', subq_3.ds) AS metric_time__month + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql new file mode 100644 index 0000000000..ab6c21f75f --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_cumulative_metric_with_multiple_metric_time_dimensions +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative metric queried with multiple metric time dimensions. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['txn_revenue', 'metric_time__day', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_10.ds AS metric_time__day + , DATE_TRUNC('month', subq_10.ds) AS metric_time__month + , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue +FROM ***************************.mf_time_spine subq_10 +CROSS JOIN + ***************************.fct_revenue revenue_src_28000 +GROUP BY + subq_10.ds + , DATE_TRUNC('month', subq_10.ds) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql new file mode 100644 index 0000000000..020134e9f0 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql @@ -0,0 +1,443 @@ +test_name: test_cumulative_metric_with_non_adjustable_time_filter +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric query with a time filter that cannot be automatically adjusted. + + Not all query inputs with time constraint filters allow us to adjust the time constraint to include the full + span of input data for a cumulative metric. When we do not have an adjustable time filter we must include all + input data in order to ensure the cumulative metric is correct. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__day + , subq_7.bookers AS every_two_days_bookers +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , COUNT(DISTINCT subq_6.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookers + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.max_booking_value + , subq_4.min_booking_value + , subq_4.bookers + , subq_4.average_booking_value + , subq_4.referred_bookings + , subq_4.median_booking_value + , subq_4.booking_value_p99 + , subq_4.discrete_booking_value_p99 + , subq_4.approximate_continuous_booking_value_p99 + , subq_4.approximate_discrete_booking_value_p99 + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql new file mode 100644 index 0000000000..a2d5d44a19 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql @@ -0,0 +1,31 @@ +test_name: test_cumulative_metric_with_non_adjustable_time_filter +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric query with a time filter that cannot be automatically adjusted. + + Not all query inputs with time constraint filters allow us to adjust the time constraint to include the full + span of input data for a cumulative metric. When we do not have an adjustable time filter we must include all + input data in order to ensure the cumulative metric is correct. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookers', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COUNT(DISTINCT bookers) AS every_two_days_bookers +FROM ( + -- Join Self Over Time Range + SELECT + subq_11.ds AS metric_time__day + , bookings_source_src_28000.guest_id AS bookers + FROM ***************************.mf_time_spine subq_11 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql new file mode 100644 index 0000000000..b99b3d0cc1 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql @@ -0,0 +1,174 @@ +test_name: test_cumulative_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative all-time metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_8.metric_time__week + , subq_8.revenue_all_time +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.metric_time__week + , LAST_VALUE(subq_7.revenue_all_time) OVER ( + PARTITION BY subq_7.metric_time__week + ORDER BY subq_7.metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_all_time + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.txn_revenue AS revenue_all_time + FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__week + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__week AS metric_time__week + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.metric_time__week + , subq_8.revenue_all_time +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..6872d0da21 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_cumulative_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative all-time metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + metric_time__week + , revenue_all_time +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + metric_time__week + , LAST_VALUE(revenue_all_time) OVER ( + PARTITION BY metric_time__week + ORDER BY metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_all_time + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_12.ds AS metric_time__day + , DATE_TRUNC('week', subq_12.ds) AS metric_time__week + , SUM(revenue_src_28000.revenue) AS revenue_all_time + FROM ***************************.mf_time_spine subq_12 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + subq_12.ds + , DATE_TRUNC('week', subq_12.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +GROUP BY + metric_time__week + , revenue_all_time +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..a793f5bd6b --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql @@ -0,0 +1,237 @@ +test_name: test_cumulative_metric_with_time_constraint +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric query with an adjustable time constraint. + + Not all query inputs with time constraint filters allow us to adjust the time constraint to include the full + span of input data for a cumulative metric, but when we receive a time constraint filter expression we can + automatically adjust it should render a query similar to this one. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__day + , subq_8.txn_revenue AS trailing_2_months_revenue +FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.txn_revenue + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.revenue_instance__ds__day + , subq_5.revenue_instance__ds__week + , subq_5.revenue_instance__ds__month + , subq_5.revenue_instance__ds__quarter + , subq_5.revenue_instance__ds__year + , subq_5.revenue_instance__ds__extract_year + , subq_5.revenue_instance__ds__extract_quarter + , subq_5.revenue_instance__ds__extract_month + , subq_5.revenue_instance__ds__extract_day + , subq_5.revenue_instance__ds__extract_dow + , subq_5.revenue_instance__ds__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.user + , subq_5.revenue_instance__user + , subq_5.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_3.metric_time__day AS metric_time__day + , subq_2.ds__day AS ds__day + , subq_2.ds__week AS ds__week + , subq_2.ds__month AS ds__month + , subq_2.ds__quarter AS ds__quarter + , subq_2.ds__year AS ds__year + , subq_2.ds__extract_year AS ds__extract_year + , subq_2.ds__extract_quarter AS ds__extract_quarter + , subq_2.ds__extract_month AS ds__extract_month + , subq_2.ds__extract_day AS ds__extract_day + , subq_2.ds__extract_dow AS ds__extract_dow + , subq_2.ds__extract_doy AS ds__extract_doy + , subq_2.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_2.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_2.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_2.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_2.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_2.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_2.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_2.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_2.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_2.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_2.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_2.metric_time__week AS metric_time__week + , subq_2.metric_time__month AS metric_time__month + , subq_2.metric_time__quarter AS metric_time__quarter + , subq_2.metric_time__year AS metric_time__year + , subq_2.metric_time__extract_year AS metric_time__extract_year + , subq_2.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_2.metric_time__extract_month AS metric_time__extract_month + , subq_2.metric_time__extract_day AS metric_time__extract_day + , subq_2.metric_time__extract_dow AS metric_time__extract_dow + , subq_2.metric_time__extract_doy AS metric_time__extract_doy + , subq_2.user AS user + , subq_2.revenue_instance__user AS revenue_instance__user + , subq_2.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_4.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_4 + WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + CROSS JOIN + ( + -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.revenue_instance__ds__day + , subq_1.revenue_instance__ds__week + , subq_1.revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.revenue_instance__user + , subq_1.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2019-11-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..00c33d0fac --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_cumulative_metric_with_time_constraint +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a cumulative metric query with an adjustable time constraint. + + Not all query inputs with time constraint filters allow us to adjust the time constraint to include the full + span of input data for a cumulative metric, but when we receive a time constraint filter expression we can + automatically adjust it should render a query similar to this one. +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] +-- Pass Only Elements: ['txn_revenue', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_12.metric_time__day AS metric_time__day + , SUM(subq_11.txn_revenue) AS trailing_2_months_revenue +FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine subq_13 + WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +CROSS JOIN +( + -- Read Elements From Semantic Model 'revenue' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , revenue AS txn_revenue + FROM ***************************.fct_revenue revenue_src_28000 + WHERE DATE_TRUNC('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' +GROUP BY + subq_12.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql new file mode 100644 index 0000000000..fdeaa19735 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql @@ -0,0 +1,177 @@ +test_name: test_derived_cumulative_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Test querying a derived metric with a cumulative input metric using non-default grains. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__week + , t2mr - 10 AS trailing_2_months_revenue_sub_10 +FROM ( + -- Re-aggregate Metric via Group By + SELECT + subq_8.metric_time__week + , subq_8.t2mr + FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.metric_time__week + , AVG(subq_7.t2mr) OVER (PARTITION BY subq_7.metric_time__week) AS t2mr + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.metric_time__day + , subq_6.metric_time__week + , subq_6.txn_revenue AS t2mr + FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__week + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__week AS metric_time__week + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__week + , subq_8.t2mr + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql new file mode 100644 index 0000000000..9b207259c9 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_derived_cumulative_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Test querying a derived metric with a cumulative input metric using non-default grains. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__week + , t2mr - 10 AS trailing_2_months_revenue_sub_10 +FROM ( + -- Re-aggregate Metric via Group By + SELECT + metric_time__week + , t2mr + FROM ( + -- Compute Metrics via Expressions + -- Window Function for Metric Re-aggregation + SELECT + metric_time__week + , AVG(txn_revenue) OVER (PARTITION BY metric_time__week) AS t2mr + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'metric_time__week', 'metric_time__day'] + -- Aggregate Measures + SELECT + subq_13.ds AS metric_time__day + , DATE_TRUNC('week', subq_13.ds) AS metric_time__week + , SUM(revenue_src_28000.revenue) AS txn_revenue + FROM ***************************.mf_time_spine subq_13 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + subq_13.ds + , DATE_TRUNC('week', subq_13.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + GROUP BY + metric_time__week + , t2mr + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql new file mode 100644 index 0000000000..73431f417f --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql @@ -0,0 +1,174 @@ +test_name: test_grain_to_date_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative grain to date metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_8.metric_time__month + , subq_8.revenue_mtd +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.metric_time__month + , FIRST_VALUE(subq_7.revenue_mtd) OVER ( + PARTITION BY subq_7.metric_time__month + ORDER BY subq_7.metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_mtd + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.txn_revenue AS revenue_mtd + FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__month + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__month', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__month + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__month AS metric_time__month + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('month', subq_3.ds) AS metric_time__month + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.metric_time__month + , subq_8.revenue_mtd +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..b67bdf61ac --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_grain_to_date_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative grain to date metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + metric_time__month + , revenue_mtd +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + metric_time__month + , FIRST_VALUE(revenue_mtd) OVER ( + PARTITION BY metric_time__month + ORDER BY metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_mtd + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'metric_time__month', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_12.ds AS metric_time__day + , DATE_TRUNC('month', subq_12.ds) AS metric_time__month + , SUM(revenue_src_28000.revenue) AS revenue_mtd + FROM ***************************.mf_time_spine subq_12 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + subq_12.ds + , DATE_TRUNC('month', subq_12.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +GROUP BY + metric_time__month + , revenue_mtd +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql new file mode 100644 index 0000000000..d0f2aecb9d --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql @@ -0,0 +1,186 @@ +test_name: test_grain_to_date_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative grain to date metric queried with non-default grains. + + Uses agg time dimension instead of metric_time. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_8.revenue_instance__ds__quarter + , subq_8.revenue_instance__ds__year + , subq_8.revenue_mtd +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.revenue_instance__ds__quarter + , subq_7.revenue_instance__ds__year + , FIRST_VALUE(subq_7.revenue_mtd) OVER ( + PARTITION BY + subq_7.revenue_instance__ds__quarter + , subq_7.revenue_instance__ds__year + ORDER BY subq_7.metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_mtd + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.revenue_instance__ds__quarter + , subq_6.revenue_instance__ds__year + , subq_6.metric_time__day + , subq_6.txn_revenue AS revenue_mtd + FROM ( + -- Aggregate Measures + SELECT + subq_5.revenue_instance__ds__quarter + , subq_5.revenue_instance__ds__year + , subq_5.metric_time__day + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__quarter', 'revenue_instance__ds__year', 'metric_time__day'] + SELECT + subq_4.revenue_instance__ds__quarter + , subq_4.revenue_instance__ds__year + , subq_4.metric_time__day + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_2.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + DATE_TRUNC('quarter', subq_3.ds) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', subq_3.ds) AS revenue_instance__ds__year + , subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.revenue_instance__ds__quarter + , subq_5.revenue_instance__ds__year + , subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.revenue_instance__ds__quarter + , subq_8.revenue_instance__ds__year + , subq_8.revenue_mtd +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql new file mode 100644 index 0000000000..3834087e40 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql @@ -0,0 +1,51 @@ +test_name: test_grain_to_date_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative grain to date metric queried with non-default grains. + + Uses agg time dimension instead of metric_time. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + revenue_instance__ds__quarter + , revenue_instance__ds__year + , revenue_mtd +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + revenue_instance__ds__quarter + , revenue_instance__ds__year + , FIRST_VALUE(revenue_mtd) OVER ( + PARTITION BY + revenue_instance__ds__quarter + , revenue_instance__ds__year + ORDER BY metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS revenue_mtd + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'revenue_instance__ds__quarter', 'revenue_instance__ds__year', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + DATE_TRUNC('quarter', subq_12.ds) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', subq_12.ds) AS revenue_instance__ds__year + , subq_12.ds AS metric_time__day + , SUM(revenue_src_28000.revenue) AS revenue_mtd + FROM ***************************.mf_time_spine subq_12 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + DATE_TRUNC('quarter', subq_12.ds) + , DATE_TRUNC('year', subq_12.ds) + , subq_12.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +GROUP BY + revenue_instance__ds__quarter + , revenue_instance__ds__year + , revenue_mtd +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql new file mode 100644 index 0000000000..850fb0cd4b --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql @@ -0,0 +1,170 @@ +test_name: test_window_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative window metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_8.metric_time__year + , subq_8.trailing_2_months_revenue +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_7.metric_time__year + , AVG(subq_7.trailing_2_months_revenue) OVER (PARTITION BY subq_7.metric_time__year) AS trailing_2_months_revenue + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.metric_time__day + , subq_6.metric_time__year + , subq_6.txn_revenue AS trailing_2_months_revenue + FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , subq_5.metric_time__year + , SUM(subq_5.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__year', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.metric_time__year + , subq_4.txn_revenue + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__year AS metric_time__year + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + , DATE_TRUNC('year', subq_3.ds) AS metric_time__year + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + , subq_5.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.metric_time__year + , subq_8.trailing_2_months_revenue +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..dda45086a5 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql @@ -0,0 +1,38 @@ +test_name: test_window_metric_with_non_default_grain +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative window metric queried with non-default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + metric_time__year + , trailing_2_months_revenue +FROM ( + -- Compute Metrics via Expressions + -- Window Function for Metric Re-aggregation + SELECT + metric_time__year + , AVG(txn_revenue) OVER (PARTITION BY metric_time__year) AS trailing_2_months_revenue + FROM ( + -- Join Self Over Time Range + -- Pass Only Elements: ['txn_revenue', 'metric_time__year', 'metric_time__day'] + -- Aggregate Measures + SELECT + subq_12.ds AS metric_time__day + , DATE_TRUNC('year', subq_12.ds) AS metric_time__year + , SUM(revenue_src_28000.revenue) AS txn_revenue + FROM ***************************.mf_time_spine subq_12 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + GROUP BY + subq_12.ds + , DATE_TRUNC('year', subq_12.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +GROUP BY + metric_time__year + , trailing_2_months_revenue +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql new file mode 100644 index 0000000000..88b7389459 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql @@ -0,0 +1,428 @@ +test_name: test_window_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative window metric queried with non-default grains. + + Uses both metric_time and agg_time_dimension. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_12.booking__ds__month + , subq_12.metric_time__week + , subq_12.every_two_days_bookers_fill_nulls_with_0 +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_11.booking__ds__month + , subq_11.metric_time__week + , FIRST_VALUE(subq_11.every_two_days_bookers_fill_nulls_with_0) OVER ( + PARTITION BY + subq_11.booking__ds__month + , subq_11.metric_time__week + ORDER BY subq_11.metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS every_two_days_bookers_fill_nulls_with_0 + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_10.booking__ds__month + , subq_10.metric_time__week + , subq_10.metric_time__day + , COALESCE(subq_10.bookers, 0) AS every_two_days_bookers_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_9.booking__ds__month AS booking__ds__month + , subq_9.metric_time__week AS metric_time__week + , subq_9.metric_time__day AS metric_time__day + , subq_6.bookers AS bookers + FROM ( + -- Pass Only Elements: ['booking__ds__month', 'metric_time__week', 'metric_time__day'] + SELECT + subq_8.booking__ds__month + , subq_8.metric_time__week + , subq_8.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__month AS booking__ds__month + , subq_7.ds__week AS metric_time__week + , subq_7.ds__day AS metric_time__day + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_5.booking__ds__month + , subq_5.metric_time__day + , subq_5.metric_time__week + , COUNT(DISTINCT subq_5.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__week', 'booking__ds__month', 'metric_time__day'] + SELECT + subq_4.booking__ds__month + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.bookers + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.booking__ds__month AS booking__ds__month + , subq_2.metric_time__day AS metric_time__day + , subq_2.metric_time__week AS metric_time__week + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + DATE_TRUNC('month', subq_3.ds) AS booking__ds__month + , subq_3.ds AS metric_time__day + , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.booking__ds__month + , subq_5.metric_time__day + , subq_5.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_9.metric_time__day = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +GROUP BY + subq_12.booking__ds__month + , subq_12.metric_time__week + , subq_12.every_two_days_bookers_fill_nulls_with_0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql new file mode 100644 index 0000000000..4e2ad03780 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql @@ -0,0 +1,64 @@ +test_name: test_window_metric_with_non_default_grains +test_filename: test_cumulative_metric_rendering.py +docstring: + Tests rendering a query for a cumulative window metric queried with non-default grains. + + Uses both metric_time and agg_time_dimension. Excludes default grain. +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + booking__ds__month + , metric_time__week + , every_two_days_bookers_fill_nulls_with_0 +FROM ( + -- Compute Metrics via Expressions + -- Window Function for Metric Re-aggregation + SELECT + booking__ds__month + , metric_time__week + , FIRST_VALUE(COALESCE(bookers, 0)) OVER ( + PARTITION BY + booking__ds__month + , metric_time__week + ORDER BY metric_time__day + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS every_two_days_bookers_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + DATE_TRUNC('month', time_spine_src_28006.ds) AS booking__ds__month + , DATE_TRUNC('week', time_spine_src_28006.ds) AS metric_time__week + , time_spine_src_28006.ds AS metric_time__day + , subq_19.bookers AS bookers + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Join Self Over Time Range + -- Pass Only Elements: ['bookers', 'metric_time__week', 'booking__ds__month', 'metric_time__day'] + -- Aggregate Measures + SELECT + DATE_TRUNC('month', subq_16.ds) AS booking__ds__month + , subq_16.ds AS metric_time__day + , DATE_TRUNC('week', subq_16.ds) AS metric_time__week + , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers + FROM ***************************.mf_time_spine subq_16 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + DATE_TRUNC('month', subq_16.ds) + , subq_16.ds + , DATE_TRUNC('week', subq_16.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + ON + time_spine_src_28006.ds = subq_19.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_25 +GROUP BY + booking__ds__month + , metric_time__week + , every_two_days_bookers_fill_nulls_with_0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt new file mode 100644 index 0000000000..e3cc60cfef --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt @@ -0,0 +1,9 @@ +test_name: test_cumulative_metric_with_non_adjustable_filter +test_filename: test_cumulative_metrics.py +docstring: + Tests a cumulative metric with a filter that cannot be adjusted to ensure all data is included. +--- +metric_time__day trailing_2_months_revenue +------------------- --------------------------- +2020-03-15T00:00:00 12000 +2020-04-30T00:00:00 12000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt new file mode 100644 index 0000000000..c8d7c5e387 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt @@ -0,0 +1,11 @@ +test_name: test_grain_to_date_cumulative_metric +test_filename: test_cumulative_metrics.py +docstring: + Tests a month to date cumulative metric with a constraint to ensure all necessary input data is included. +--- +metric_time__day revenue_mtd +------------------- ------------- +2021-01-03T00:00:00 4000 +2021-01-04T00:00:00 4000 +2021-01-05T00:00:00 4000 +2021-01-06T00:00:00 4000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt new file mode 100644 index 0000000000..7f6a0b7319 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt @@ -0,0 +1,69 @@ +test_name: test_multiple_cumulative_metrics +test_filename: test_cumulative_metrics.py +docstring: + Tests a query with multiple cumulative metrics to ensure date selections align. +--- +metric_time__day revenue_all_time trailing_2_months_revenue +------------------- ------------------ --------------------------- +2020-03-31T00:00:00 12000 11000 +2020-04-01T00:00:00 12000 11000 +2020-04-02T00:00:00 12000 11000 +2020-04-03T00:00:00 12000 11000 +2020-04-04T00:00:00 12000 11000 +2020-04-05T00:00:00 12000 11000 +2020-04-06T00:00:00 12000 11000 +2020-04-07T00:00:00 12000 11000 +2020-04-08T00:00:00 12000 11000 +2020-04-09T00:00:00 12000 11000 +2020-04-10T00:00:00 12000 11000 +2020-04-11T00:00:00 12000 11000 +2020-04-12T00:00:00 12000 11000 +2020-04-13T00:00:00 12000 11000 +2020-04-14T00:00:00 12000 11000 +2020-04-15T00:00:00 12000 11000 +2020-04-16T00:00:00 12000 11000 +2020-04-17T00:00:00 12000 11000 +2020-04-18T00:00:00 12000 11000 +2020-04-19T00:00:00 12000 11000 +2020-04-20T00:00:00 12000 11000 +2020-04-21T00:00:00 12000 11000 +2020-04-22T00:00:00 12000 11000 +2020-04-23T00:00:00 12000 11000 +2020-04-24T00:00:00 12000 11000 +2020-04-25T00:00:00 12000 11000 +2020-04-26T00:00:00 12000 11000 +2020-04-27T00:00:00 12000 11000 +2020-04-28T00:00:00 12000 11000 +2020-04-29T00:00:00 12000 11000 +2020-04-30T00:00:00 12000 11000 +2020-05-01T00:00:00 12000 11000 +2020-05-02T00:00:00 12000 11000 +2020-05-03T00:00:00 12000 11000 +2020-05-04T00:00:00 12000 11000 +2020-05-05T00:00:00 12000 11000 +2020-05-06T00:00:00 12000 11000 +2020-05-07T00:00:00 12000 11000 +2020-05-08T00:00:00 12000 11000 +2020-05-09T00:00:00 12000 11000 +2020-05-10T00:00:00 12000 11000 +2020-05-11T00:00:00 12000 11000 +2020-05-12T00:00:00 12000 11000 +2020-05-13T00:00:00 12000 11000 +2020-05-14T00:00:00 12000 11000 +2020-05-15T00:00:00 12000 11000 +2020-05-16T00:00:00 12000 11000 +2020-05-17T00:00:00 12000 11000 +2020-05-18T00:00:00 12000 11000 +2020-05-19T00:00:00 12000 11000 +2020-05-20T00:00:00 12000 11000 +2020-05-21T00:00:00 12000 11000 +2020-05-22T00:00:00 12000 11000 +2020-05-23T00:00:00 12000 11000 +2020-05-24T00:00:00 12000 11000 +2020-05-25T00:00:00 12000 11000 +2020-05-26T00:00:00 12000 11000 +2020-05-27T00:00:00 12000 11000 +2020-05-28T00:00:00 12000 11000 +2020-05-29T00:00:00 12000 11000 +2020-05-30T00:00:00 12000 11000 +2020-05-31T00:00:00 12000 11000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt new file mode 100644 index 0000000000..669857c23f --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt @@ -0,0 +1,11 @@ +test_name: test_non_additive_cumulative_metric +test_filename: test_cumulative_metrics.py +docstring: + Tests a query with a non-additive cumulative metric to ensure the non-additive constraint is applied. +--- +metric_time__day every_two_days_bookers +------------------- ------------------------ +2019-12-31T00:00:00 6 +2020-01-01T00:00:00 6 +2020-01-02T00:00:00 6 +2020-01-03T00:00:00 6 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt new file mode 100644 index 0000000000..e6f9425604 --- /dev/null +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt @@ -0,0 +1,97 @@ +test_name: test_simple_cumulative_metric +test_filename: test_cumulative_metrics.py +docstring: + Tests a query of a cumulative metric with a monthly window and a time constraint adjustment. +--- +metric_time__day trailing_2_months_revenue +------------------- --------------------------- +2020-02-01T00:00:00 12000 +2020-02-02T00:00:00 12000 +2020-02-03T00:00:00 12000 +2020-02-04T00:00:00 12000 +2020-02-05T00:00:00 12000 +2020-02-06T00:00:00 12000 +2020-02-07T00:00:00 12000 +2020-02-08T00:00:00 12000 +2020-02-09T00:00:00 12000 +2020-02-10T00:00:00 12000 +2020-02-11T00:00:00 12000 +2020-02-12T00:00:00 12000 +2020-02-13T00:00:00 12000 +2020-02-14T00:00:00 12000 +2020-02-15T00:00:00 12000 +2020-02-16T00:00:00 12000 +2020-02-17T00:00:00 12000 +2020-02-18T00:00:00 12000 +2020-02-19T00:00:00 12000 +2020-02-20T00:00:00 12000 +2020-02-21T00:00:00 12000 +2020-02-22T00:00:00 12000 +2020-02-23T00:00:00 12000 +2020-02-24T00:00:00 12000 +2020-02-25T00:00:00 12000 +2020-02-26T00:00:00 12000 +2020-02-27T00:00:00 12000 +2020-02-28T00:00:00 12000 +2020-02-29T00:00:00 12000 +2020-03-01T00:00:00 12000 +2020-03-02T00:00:00 12000 +2020-03-03T00:00:00 12000 +2020-03-04T00:00:00 12000 +2020-03-05T00:00:00 12000 +2020-03-06T00:00:00 12000 +2020-03-07T00:00:00 12000 +2020-03-08T00:00:00 12000 +2020-03-09T00:00:00 12000 +2020-03-10T00:00:00 12000 +2020-03-11T00:00:00 12000 +2020-03-12T00:00:00 12000 +2020-03-13T00:00:00 12000 +2020-03-14T00:00:00 12000 +2020-03-15T00:00:00 12000 +2020-03-16T00:00:00 12000 +2020-03-17T00:00:00 12000 +2020-03-18T00:00:00 12000 +2020-03-19T00:00:00 12000 +2020-03-20T00:00:00 12000 +2020-03-21T00:00:00 12000 +2020-03-22T00:00:00 12000 +2020-03-23T00:00:00 12000 +2020-03-24T00:00:00 12000 +2020-03-25T00:00:00 12000 +2020-03-26T00:00:00 12000 +2020-03-27T00:00:00 12000 +2020-03-28T00:00:00 12000 +2020-03-29T00:00:00 12000 +2020-03-30T00:00:00 12000 +2020-03-31T00:00:00 12000 +2020-04-01T00:00:00 12000 +2020-04-02T00:00:00 12000 +2020-04-03T00:00:00 12000 +2020-04-04T00:00:00 12000 +2020-04-05T00:00:00 12000 +2020-04-06T00:00:00 12000 +2020-04-07T00:00:00 12000 +2020-04-08T00:00:00 12000 +2020-04-09T00:00:00 12000 +2020-04-10T00:00:00 12000 +2020-04-11T00:00:00 12000 +2020-04-12T00:00:00 12000 +2020-04-13T00:00:00 12000 +2020-04-14T00:00:00 12000 +2020-04-15T00:00:00 12000 +2020-04-16T00:00:00 12000 +2020-04-17T00:00:00 12000 +2020-04-18T00:00:00 12000 +2020-04-19T00:00:00 12000 +2020-04-20T00:00:00 12000 +2020-04-21T00:00:00 12000 +2020-04-22T00:00:00 12000 +2020-04-23T00:00:00 12000 +2020-04-24T00:00:00 12000 +2020-04-25T00:00:00 12000 +2020-04-26T00:00:00 12000 +2020-04-27T00:00:00 12000 +2020-04-28T00:00:00 12000 +2020-04-29T00:00:00 12000 +2020-04-30T00:00:00 12000 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..16052b150a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql @@ -0,0 +1,449 @@ +test_name: test_conversion_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__martian_day + , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__martian_day, subq_15.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_4.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__martian_day + , SUM(subq_3.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__martian_day'] + SELECT + subq_2.metric_time__martian_day + , subq_2.visits + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.visit__ds__day AS visit__ds__day + , subq_0.visit__ds__week AS visit__ds__week + , subq_0.visit__ds__month AS visit__ds__month + , subq_0.visit__ds__quarter AS visit__ds__quarter + , subq_0.visit__ds__year AS visit__ds__year + , subq_0.visit__ds__extract_year AS visit__ds__extract_year + , subq_0.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_0.visit__ds__extract_month AS visit__ds__extract_month + , subq_0.visit__ds__extract_day AS visit__ds__extract_day + , subq_0.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_0.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user AS user + , subq_0.session AS session + , subq_0.visit__user AS visit__user + , subq_0.visit__session AS visit__session + , subq_0.referrer_id AS referrer_id + , subq_0.visit__referrer_id AS visit__referrer_id + , subq_0.visits AS visits + , subq_0.visitors AS visitors + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_14.metric_time__martian_day + , SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'metric_time__martian_day'] + SELECT + subq_13.metric_time__martian_day + , subq_13.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_12.metric_time__martian_day + , subq_12.metric_time__day + , subq_12.user + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.metric_time__martian_day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + subq_7.metric_time__martian_day + , subq_7.metric_time__day + , subq_7.user + , subq_7.visits + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_5.ds__day AS ds__day + , subq_5.ds__week AS ds__week + , subq_5.ds__month AS ds__month + , subq_5.ds__quarter AS ds__quarter + , subq_5.ds__year AS ds__year + , subq_5.ds__extract_year AS ds__extract_year + , subq_5.ds__extract_quarter AS ds__extract_quarter + , subq_5.ds__extract_month AS ds__extract_month + , subq_5.ds__extract_day AS ds__extract_day + , subq_5.ds__extract_dow AS ds__extract_dow + , subq_5.ds__extract_doy AS ds__extract_doy + , subq_5.visit__ds__day AS visit__ds__day + , subq_5.visit__ds__week AS visit__ds__week + , subq_5.visit__ds__month AS visit__ds__month + , subq_5.visit__ds__quarter AS visit__ds__quarter + , subq_5.visit__ds__year AS visit__ds__year + , subq_5.visit__ds__extract_year AS visit__ds__extract_year + , subq_5.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_5.visit__ds__extract_month AS visit__ds__extract_month + , subq_5.visit__ds__extract_day AS visit__ds__extract_day + , subq_5.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_5.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.user AS user + , subq_5.session AS session + , subq_5.visit__user AS visit__user + , subq_5.visit__session AS visit__session + , subq_5.referrer_id AS referrer_id + , subq_5.visit__referrer_id AS visit__referrer_id + , subq_5.visits AS visits + , subq_5.visitors AS visitors + , subq_6.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_6 + ON + subq_5.ds__day = subq_6.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_4.metric_time__martian_day = subq_15.metric_time__martian_day + GROUP BY + COALESCE(subq_4.metric_time__martian_day, subq_15.metric_time__martian_day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..9e5d530194 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,129 @@ +test_name: test_conversion_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__martian_day AS metric_time__martian_day + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_21.metric_time__martian_day, subq_31.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_21.visits) AS visits + , MAX(subq_31.buys) AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['visits', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + subq_18.martian_day AS metric_time__martian_day + , SUM(sma_28019_cte.visits) AS visits + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_18 + ON + sma_28019_cte.metric_time__day = subq_18.ds + GROUP BY + subq_18.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + metric_time__martian_day + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_24.visits) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_24.metric_time__martian_day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_24.metric_time__day) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_24.user) OVER ( + PARTITION BY + subq_27.user + , subq_27.metric_time__day + , subq_27.mf_internal_uuid + ORDER BY subq_24.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_27.mf_internal_uuid AS mf_internal_uuid + , subq_27.buys AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + subq_22.martian_day AS metric_time__martian_day + , sma_28019_cte.metric_time__day AS metric_time__day + , sma_28019_cte.user AS user + , sma_28019_cte.visits AS visits + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_22 + ON + sma_28019_cte.metric_time__day = subq_22.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + GROUP BY + metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_21.metric_time__martian_day = subq_31.metric_time__martian_day + GROUP BY + COALESCE(subq_21.metric_time__martian_day, subq_31.metric_time__martian_day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql new file mode 100644 index 0000000000..801bd533f2 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql @@ -0,0 +1,545 @@ +test_name: test_conversion_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__martian_day + , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.metric_time__martian_day, subq_17.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_5.visits) AS visits + , MAX(subq_17.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_4.metric_time__martian_day + , SUM(subq_4.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__martian_day'] + SELECT + subq_3.metric_time__martian_day + , subq_3.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.visit__ds__day + , subq_2.visit__ds__week + , subq_2.visit__ds__month + , subq_2.visit__ds__quarter + , subq_2.visit__ds__year + , subq_2.visit__ds__extract_year + , subq_2.visit__ds__extract_quarter + , subq_2.visit__ds__extract_month + , subq_2.visit__ds__extract_day + , subq_2.visit__ds__extract_dow + , subq_2.visit__ds__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.user + , subq_2.session + , subq_2.visit__user + , subq_2.visit__session + , subq_2.referrer_id + , subq_2.visit__referrer_id + , subq_2.visits + , subq_2.visitors + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.visit__ds__day AS visit__ds__day + , subq_0.visit__ds__week AS visit__ds__week + , subq_0.visit__ds__month AS visit__ds__month + , subq_0.visit__ds__quarter AS visit__ds__quarter + , subq_0.visit__ds__year AS visit__ds__year + , subq_0.visit__ds__extract_year AS visit__ds__extract_year + , subq_0.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_0.visit__ds__extract_month AS visit__ds__extract_month + , subq_0.visit__ds__extract_day AS visit__ds__extract_day + , subq_0.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_0.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user AS user + , subq_0.session AS session + , subq_0.visit__user AS visit__user + , subq_0.visit__session AS visit__session + , subq_0.referrer_id AS referrer_id + , subq_0.visit__referrer_id AS visit__referrer_id + , subq_0.visits AS visits + , subq_0.visitors AS visitors + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_16.metric_time__martian_day + , SUM(subq_16.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'metric_time__martian_day'] + SELECT + subq_15.metric_time__martian_day + , subq_15.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_14.metric_time__martian_day + , subq_14.metric_time__day + , subq_14.user + , subq_14.buys + , subq_14.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_10.visits) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_10.metric_time__martian_day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_10.metric_time__day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_10.user) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_13.mf_internal_uuid AS mf_internal_uuid + , subq_13.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + subq_9.metric_time__martian_day + , subq_9.metric_time__day + , subq_9.user + , subq_9.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.metric_time__martian_day + , subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.visit__ds__day AS visit__ds__day + , subq_6.visit__ds__week AS visit__ds__week + , subq_6.visit__ds__month AS visit__ds__month + , subq_6.visit__ds__quarter AS visit__ds__quarter + , subq_6.visit__ds__year AS visit__ds__year + , subq_6.visit__ds__extract_year AS visit__ds__extract_year + , subq_6.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_6.visit__ds__extract_month AS visit__ds__extract_month + , subq_6.visit__ds__extract_day AS visit__ds__extract_day + , subq_6.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_6.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.user AS user + , subq_6.session AS session + , subq_6.visit__user AS visit__user + , subq_6.visit__session AS visit__session + , subq_6.referrer_id AS referrer_id + , subq_6.visit__referrer_id AS visit__referrer_id + , subq_6.visits AS visits + , subq_6.visitors AS visitors + , subq_7.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_month__month + , subq_12.ds_month__quarter + , subq_12.ds_month__year + , subq_12.ds_month__extract_year + , subq_12.ds_month__extract_quarter + , subq_12.ds_month__extract_month + , subq_12.buy__ds__day + , subq_12.buy__ds__week + , subq_12.buy__ds__month + , subq_12.buy__ds__quarter + , subq_12.buy__ds__year + , subq_12.buy__ds__extract_year + , subq_12.buy__ds__extract_quarter + , subq_12.buy__ds__extract_month + , subq_12.buy__ds__extract_day + , subq_12.buy__ds__extract_dow + , subq_12.buy__ds__extract_doy + , subq_12.buy__ds_month__month + , subq_12.buy__ds_month__quarter + , subq_12.buy__ds_month__year + , subq_12.buy__ds_month__extract_year + , subq_12.buy__ds_month__extract_quarter + , subq_12.buy__ds_month__extract_month + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session_id + , subq_12.buy__user + , subq_12.buy__session_id + , subq_12.buys + , subq_12.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_month__month + , subq_11.ds_month__quarter + , subq_11.ds_month__year + , subq_11.ds_month__extract_year + , subq_11.ds_month__extract_quarter + , subq_11.ds_month__extract_month + , subq_11.buy__ds__day + , subq_11.buy__ds__week + , subq_11.buy__ds__month + , subq_11.buy__ds__quarter + , subq_11.buy__ds__year + , subq_11.buy__ds__extract_year + , subq_11.buy__ds__extract_quarter + , subq_11.buy__ds__extract_month + , subq_11.buy__ds__extract_day + , subq_11.buy__ds__extract_dow + , subq_11.buy__ds__extract_doy + , subq_11.buy__ds_month__month + , subq_11.buy__ds_month__quarter + , subq_11.buy__ds_month__year + , subq_11.buy__ds_month__extract_year + , subq_11.buy__ds_month__extract_quarter + , subq_11.buy__ds_month__extract_month + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.user + , subq_11.session_id + , subq_11.buy__user + , subq_11.buy__session_id + , subq_11.buys + , subq_11.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + subq_16.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_5.metric_time__martian_day = subq_17.metric_time__martian_day + GROUP BY + COALESCE(subq_5.metric_time__martian_day, subq_17.metric_time__martian_day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql new file mode 100644 index 0000000000..3e93a6bf2f --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -0,0 +1,147 @@ +test_name: test_conversion_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__martian_day AS metric_time__martian_day + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_24.metric_time__martian_day, subq_35.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_24.visits) AS visits + , MAX(subq_35.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + metric_time__martian_day + , SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + SELECT + sma_28019_cte.visits AS visits + , subq_20.martian_day AS metric_time__martian_day + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_20 + ON + sma_28019_cte.metric_time__day = subq_20.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + WHERE metric_time__martian_day = '2020-01-01' + GROUP BY + metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + metric_time__martian_day + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_28.visits) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_28.metric_time__martian_day) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_28.metric_time__day) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_28.user) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_31.mf_internal_uuid AS mf_internal_uuid + , subq_31.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + metric_time__martian_day + , metric_time__day + , subq_26.user + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + SELECT + sma_28019_cte.metric_time__day AS metric_time__day + , sma_28019_cte.user AS user + , sma_28019_cte.visits AS visits + , subq_25.martian_day AS metric_time__martian_day + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_25 + ON + sma_28019_cte.metric_time__day = subq_25.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_32 + GROUP BY + metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + subq_24.metric_time__martian_day = subq_35.metric_time__martian_day + GROUP BY + COALESCE(subq_24.metric_time__martian_day, subq_35.metric_time__martian_day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql new file mode 100644 index 0000000000..bdd0e6fc64 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -0,0 +1,531 @@ +test_name: test_conversion_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_5.visits) AS visits + , MAX(subq_17.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_4.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits',] + SELECT + subq_3.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.visit__ds__day + , subq_2.visit__ds__week + , subq_2.visit__ds__month + , subq_2.visit__ds__quarter + , subq_2.visit__ds__year + , subq_2.visit__ds__extract_year + , subq_2.visit__ds__extract_quarter + , subq_2.visit__ds__extract_month + , subq_2.visit__ds__extract_day + , subq_2.visit__ds__extract_dow + , subq_2.visit__ds__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.user + , subq_2.session + , subq_2.visit__user + , subq_2.visit__session + , subq_2.referrer_id + , subq_2.visit__referrer_id + , subq_2.visits + , subq_2.visitors + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.visit__ds__day AS visit__ds__day + , subq_0.visit__ds__week AS visit__ds__week + , subq_0.visit__ds__month AS visit__ds__month + , subq_0.visit__ds__quarter AS visit__ds__quarter + , subq_0.visit__ds__year AS visit__ds__year + , subq_0.visit__ds__extract_year AS visit__ds__extract_year + , subq_0.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_0.visit__ds__extract_month AS visit__ds__extract_month + , subq_0.visit__ds__extract_day AS visit__ds__extract_day + , subq_0.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_0.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user AS user + , subq_0.session AS session + , subq_0.visit__user AS visit__user + , subq_0.visit__session AS visit__session + , subq_0.referrer_id AS referrer_id + , subq_0.visit__referrer_id AS visit__referrer_id + , subq_0.visits AS visits + , subq_0.visitors AS visitors + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + CROSS JOIN + ( + -- Aggregate Measures + SELECT + SUM(subq_16.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys',] + SELECT + subq_15.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_14.metric_time__martian_day + , subq_14.metric_time__day + , subq_14.user + , subq_14.buys + , subq_14.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_10.visits) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_10.metric_time__martian_day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_10.metric_time__day) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_10.user) OVER ( + PARTITION BY + subq_13.user + , subq_13.metric_time__day + , subq_13.mf_internal_uuid + ORDER BY subq_10.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_13.mf_internal_uuid AS mf_internal_uuid + , subq_13.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + subq_9.metric_time__martian_day + , subq_9.metric_time__day + , subq_9.user + , subq_9.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.metric_time__martian_day + , subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.visit__ds__day AS visit__ds__day + , subq_6.visit__ds__week AS visit__ds__week + , subq_6.visit__ds__month AS visit__ds__month + , subq_6.visit__ds__quarter AS visit__ds__quarter + , subq_6.visit__ds__year AS visit__ds__year + , subq_6.visit__ds__extract_year AS visit__ds__extract_year + , subq_6.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_6.visit__ds__extract_month AS visit__ds__extract_month + , subq_6.visit__ds__extract_day AS visit__ds__extract_day + , subq_6.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_6.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.user AS user + , subq_6.session AS session + , subq_6.visit__user AS visit__user + , subq_6.visit__session AS visit__session + , subq_6.referrer_id AS referrer_id + , subq_6.visit__referrer_id AS visit__referrer_id + , subq_6.visits AS visits + , subq_6.visitors AS visitors + , subq_7.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_month__month + , subq_12.ds_month__quarter + , subq_12.ds_month__year + , subq_12.ds_month__extract_year + , subq_12.ds_month__extract_quarter + , subq_12.ds_month__extract_month + , subq_12.buy__ds__day + , subq_12.buy__ds__week + , subq_12.buy__ds__month + , subq_12.buy__ds__quarter + , subq_12.buy__ds__year + , subq_12.buy__ds__extract_year + , subq_12.buy__ds__extract_quarter + , subq_12.buy__ds__extract_month + , subq_12.buy__ds__extract_day + , subq_12.buy__ds__extract_dow + , subq_12.buy__ds__extract_doy + , subq_12.buy__ds_month__month + , subq_12.buy__ds_month__quarter + , subq_12.buy__ds_month__year + , subq_12.buy__ds_month__extract_year + , subq_12.buy__ds_month__extract_quarter + , subq_12.buy__ds_month__extract_month + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session_id + , subq_12.buy__user + , subq_12.buy__session_id + , subq_12.buys + , subq_12.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_month__month + , subq_11.ds_month__quarter + , subq_11.ds_month__year + , subq_11.ds_month__extract_year + , subq_11.ds_month__extract_quarter + , subq_11.ds_month__extract_month + , subq_11.buy__ds__day + , subq_11.buy__ds__week + , subq_11.buy__ds__month + , subq_11.buy__ds__quarter + , subq_11.buy__ds__year + , subq_11.buy__ds__extract_year + , subq_11.buy__ds__extract_quarter + , subq_11.buy__ds__extract_month + , subq_11.buy__ds__extract_day + , subq_11.buy__ds__extract_dow + , subq_11.buy__ds__extract_doy + , subq_11.buy__ds_month__month + , subq_11.buy__ds_month__quarter + , subq_11.buy__ds_month__year + , subq_11.buy__ds_month__extract_year + , subq_11.buy__ds_month__extract_quarter + , subq_11.buy__ds_month__extract_month + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.user + , subq_11.session_id + , subq_11.buy__user + , subq_11.buy__session_id + , subq_11.buys + , subq_11.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..d84b355281 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -0,0 +1,129 @@ +test_name: test_conversion_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + CAST(MAX(subq_35.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_24.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits',] + -- Aggregate Measures + SELECT + SUM(visits) AS visits + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + SELECT + sma_28019_cte.visits AS visits + , subq_20.martian_day AS metric_time__martian_day + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_20 + ON + sma_28019_cte.metric_time__day = subq_20.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_24 +CROSS JOIN +( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys',] + -- Aggregate Measures + SELECT + SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_28.visits) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_28.metric_time__martian_day) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__martian_day + , FIRST_VALUE(subq_28.metric_time__day) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_28.user) OVER ( + PARTITION BY + subq_31.user + , subq_31.metric_time__day + , subq_31.mf_internal_uuid + ORDER BY subq_28.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_31.mf_internal_uuid AS mf_internal_uuid + , subq_31.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'metric_time__day', 'metric_time__martian_day', 'user'] + SELECT + metric_time__martian_day + , metric_time__day + , subq_26.user + , visits + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Join to Custom Granularity Dataset + SELECT + sma_28019_cte.metric_time__day AS metric_time__day + , sma_28019_cte.user AS user + , sma_28019_cte.visits AS visits + , subq_25.martian_day AS metric_time__martian_day + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + ***************************.mf_time_spine subq_25 + ON + sma_28019_cte.metric_time__day = subq_25.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_32 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_35 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..f935f709b4 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql @@ -0,0 +1,173 @@ +test_name: test_cumulative_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + subq_9.metric_time__martian_day + , subq_9.trailing_2_months_revenue +FROM ( + -- Window Function for Metric Re-aggregation + SELECT + subq_8.metric_time__martian_day + , AVG(subq_8.trailing_2_months_revenue) OVER (PARTITION BY subq_8.metric_time__martian_day) AS trailing_2_months_revenue + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__martian_day + , subq_7.metric_time__day + , subq_7.txn_revenue AS trailing_2_months_revenue + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__martian_day + , subq_6.metric_time__day + , SUM(subq_6.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'metric_time__martian_day', 'metric_time__day'] + SELECT + subq_5.metric_time__martian_day + , subq_5.metric_time__day + , subq_5.txn_revenue + FROM ( + -- Join Self Over Time Range + -- Join to Custom Granularity Dataset + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.revenue_instance__ds__day AS revenue_instance__ds__day + , subq_1.revenue_instance__ds__week AS revenue_instance__ds__week + , subq_1.revenue_instance__ds__month AS revenue_instance__ds__month + , subq_1.revenue_instance__ds__quarter AS revenue_instance__ds__quarter + , subq_1.revenue_instance__ds__year AS revenue_instance__ds__year + , subq_1.revenue_instance__ds__extract_year AS revenue_instance__ds__extract_year + , subq_1.revenue_instance__ds__extract_quarter AS revenue_instance__ds__extract_quarter + , subq_1.revenue_instance__ds__extract_month AS revenue_instance__ds__extract_month + , subq_1.revenue_instance__ds__extract_day AS revenue_instance__ds__extract_day + , subq_1.revenue_instance__ds__extract_dow AS revenue_instance__ds__extract_dow + , subq_1.revenue_instance__ds__extract_doy AS revenue_instance__ds__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.revenue_instance__user AS revenue_instance__user + , subq_1.txn_revenue AS txn_revenue + , subq_4.martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.revenue_instance__ds__day + , subq_0.revenue_instance__ds__week + , subq_0.revenue_instance__ds__month + , subq_0.revenue_instance__ds__quarter + , subq_0.revenue_instance__ds__year + , subq_0.revenue_instance__ds__extract_year + , subq_0.revenue_instance__ds__extract_quarter + , subq_0.revenue_instance__ds__extract_month + , subq_0.revenue_instance__ds__extract_day + , subq_0.revenue_instance__ds__extract_dow + , subq_0.revenue_instance__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.revenue_instance__user + , subq_0.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_4 + ON + subq_2.metric_time__day = subq_4.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__martian_day + , subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +GROUP BY + subq_9.metric_time__martian_day + , subq_9.trailing_2_months_revenue +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..efe5fef9b2 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,41 @@ +test_name: test_cumulative_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Re-aggregate Metric via Group By +SELECT + metric_time__martian_day + , trailing_2_months_revenue +FROM ( + -- Compute Metrics via Expressions + -- Window Function for Metric Re-aggregation + SELECT + metric_time__martian_day + , AVG(txn_revenue) OVER (PARTITION BY metric_time__martian_day) AS trailing_2_months_revenue + FROM ( + -- Join Self Over Time Range + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['txn_revenue', 'metric_time__martian_day', 'metric_time__day'] + -- Aggregate Measures + SELECT + subq_14.martian_day AS metric_time__martian_day + , subq_13.ds AS metric_time__day + , SUM(revenue_src_28000.revenue) AS txn_revenue + FROM ***************************.mf_time_spine subq_13 + CROSS JOIN + ***************************.fct_revenue revenue_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_14 + ON + subq_13.ds = subq_14.ds + GROUP BY + subq_14.martian_day + , subq_13.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +GROUP BY + metric_time__martian_day + , trailing_2_months_revenue +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..ed30f64e9a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql @@ -0,0 +1,474 @@ +test_name: test_derived_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_12.booking__ds__martian_day + , booking_value * 0.05 / bookers AS booking_fees_per_booker +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.booking__ds__martian_day, subq_11.booking__ds__martian_day) AS booking__ds__martian_day + , MAX(subq_5.booking_value) AS booking_value + , MAX(subq_11.bookers) AS bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.booking__ds__martian_day + , subq_4.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_3.booking__ds__martian_day + , SUM(subq_3.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'booking__ds__martian_day'] + SELECT + subq_2.booking__ds__martian_day + , subq_2.booking_value + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS booking__ds__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.booking__ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.booking__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_10.booking__ds__martian_day + , subq_10.bookers + FROM ( + -- Aggregate Measures + SELECT + subq_9.booking__ds__martian_day + , COUNT(DISTINCT subq_9.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'booking__ds__martian_day'] + SELECT + subq_8.booking__ds__martian_day + , subq_8.bookers + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_7.martian_day AS booking__ds__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.booking__ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.booking__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_5.booking__ds__martian_day = subq_11.booking__ds__martian_day + GROUP BY + COALESCE(subq_5.booking__ds__martian_day, subq_11.booking__ds__martian_day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..5699f3913e --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_derived_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + booking__ds__martian_day + , booking_value * 0.05 / bookers AS booking_fees_per_booker +FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['booking_value', 'bookers', 'booking__ds__martian_day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_14.martian_day AS booking__ds__martian_day + , SUM(bookings_source_src_28000.booking_value) AS booking_value + , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_14 + ON + DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_14.ds + GROUP BY + subq_14.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql new file mode 100644 index 0000000000..65114409a2 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql @@ -0,0 +1,281 @@ +test_name: test_join_to_time_spine_metric_grouped_by_custom_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__martian_day + , subq_8.bookings AS bookings_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_7.metric_time__martian_day AS metric_time__martian_day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__martian_day',] + SELECT + subq_6.metric_time__martian_day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__martian_day AS metric_time__martian_day + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__martian_day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + SELECT + subq_2.metric_time__martian_day + , subq_2.bookings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_7.metric_time__martian_day = subq_4.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql new file mode 100644 index 0000000000..dd9c858760 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql @@ -0,0 +1,48 @@ +test_name: test_join_to_time_spine_metric_grouped_by_custom_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__martian_day AS metric_time__martian_day + , subq_13.bookings AS bookings_join_to_time_spine +FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + -- Pass Only Elements: ['metric_time__martian_day',] + SELECT + martian_day AS metric_time__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + GROUP BY + martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +LEFT OUTER JOIN +( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + subq_10.martian_day AS metric_time__martian_day + , SUM(subq_9.bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_10 + ON + subq_9.ds__day = subq_10.ds + GROUP BY + subq_10.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_13 +ON + subq_16.metric_time__martian_day = subq_13.metric_time__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql new file mode 100644 index 0000000000..f768241a5b --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql @@ -0,0 +1,404 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__martian_day + , subq_10.bookings AS bookings_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_9.metric_time__martian_day AS metric_time__martian_day + , subq_5.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__martian_day',] + SELECT + subq_8.metric_time__martian_day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.metric_time__martian_day + , subq_7.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_6.ds__martian_day AS metric_time__martian_day + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_4.metric_time__martian_day + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + SELECT + subq_3.metric_time__martian_day + , subq_3.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + subq_9.metric_time__martian_day = subq_5.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql new file mode 100644 index 0000000000..670c8fcc81 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -0,0 +1,63 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_20.metric_time__martian_day AS metric_time__martian_day + , subq_16.bookings AS bookings_join_to_time_spine +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__martian_day',] + SELECT + metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + martian_day AS metric_time__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__martian_day = '2020-01-01' + GROUP BY + metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + -- Aggregate Measures + SELECT + metric_time__martian_day + , SUM(bookings) AS bookings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_11.bookings AS bookings + , subq_12.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_12 + ON + subq_11.ds__day = subq_12.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE metric_time__martian_day = '2020-01-01' + GROUP BY + metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +ON + subq_20.metric_time__martian_day = subq_16.metric_time__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql new file mode 100644 index 0000000000..155f4a918e --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -0,0 +1,402 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__day + , subq_10.bookings AS bookings_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_9.metric_time__day AS metric_time__day + , subq_5.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_8.metric_time__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.metric_time__day + , subq_7.metric_time__martian_day + FROM ( + -- Change Column Aliases + SELECT + subq_6.ds__day AS metric_time__day + , subq_6.ds__martian_day AS metric_time__martian_day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_4.metric_time__day + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + subq_9.metric_time__day = subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..d1f99daf82 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -0,0 +1,63 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_20.metric_time__day AS metric_time__day + , subq_16.bookings AS bookings_join_to_time_spine +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS metric_time__day + , martian_day AS metric_time__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_11.ds__day AS metric_time__day + , subq_11.bookings AS bookings + , subq_12.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_12 + ON + subq_11.ds__day = subq_12.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE metric_time__martian_day = '2020-01-01' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +ON + subq_20.metric_time__day = subq_16.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql new file mode 100644 index 0000000000..a841d418d7 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql @@ -0,0 +1,169 @@ +test_name: test_metric_custom_granularity_joined_to_non_default_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_4.metric_time__martian_day + , subq_4.listing__ds__month + , subq_4.listings +FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__martian_day + , subq_3.listing__ds__month + , SUM(subq_3.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'metric_time__martian_day', 'listing__ds__month'] + SELECT + subq_2.metric_time__martian_day + , subq_2.listing__ds__month + , subq_2.listings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__martian_day + , subq_3.listing__ds__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..de69c88b00 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql @@ -0,0 +1,30 @@ +test_name: test_metric_custom_granularity_joined_to_non_default_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Metric Time Dimension 'ds' +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['listings', 'metric_time__martian_day', 'listing__ds__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_6.martian_day AS metric_time__martian_day + , subq_5.listing__ds__month AS listing__ds__month + , SUM(subq_5.listings) AS listings +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , DATE_TRUNC('day', created_at) AS ds__day + , DATE_TRUNC('month', created_at) AS listing__ds__month + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +LEFT OUTER JOIN + ***************************.mf_time_spine subq_6 +ON + subq_5.ds__day = subq_6.ds +GROUP BY + subq_6.martian_day + , subq_5.listing__ds__month +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..9dbdd5ac72 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql @@ -0,0 +1,404 @@ +test_name: test_multiple_metrics_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_5.metric_time__martian_day, subq_11.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_5.bookings) AS bookings + , MAX(subq_11.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__martian_day + , subq_4.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__martian_day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + SELECT + subq_2.metric_time__martian_day + , subq_2.bookings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_10.metric_time__martian_day + , subq_10.listings + FROM ( + -- Aggregate Measures + SELECT + subq_9.metric_time__martian_day + , SUM(subq_9.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'metric_time__martian_day'] + SELECT + subq_8.metric_time__martian_day + , subq_8.listings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.created_at__day AS created_at__day + , subq_6.created_at__week AS created_at__week + , subq_6.created_at__month AS created_at__month + , subq_6.created_at__quarter AS created_at__quarter + , subq_6.created_at__year AS created_at__year + , subq_6.created_at__extract_year AS created_at__extract_year + , subq_6.created_at__extract_quarter AS created_at__extract_quarter + , subq_6.created_at__extract_month AS created_at__extract_month + , subq_6.created_at__extract_day AS created_at__extract_day + , subq_6.created_at__extract_dow AS created_at__extract_dow + , subq_6.created_at__extract_doy AS created_at__extract_doy + , subq_6.listing__ds__day AS listing__ds__day + , subq_6.listing__ds__week AS listing__ds__week + , subq_6.listing__ds__month AS listing__ds__month + , subq_6.listing__ds__quarter AS listing__ds__quarter + , subq_6.listing__ds__year AS listing__ds__year + , subq_6.listing__ds__extract_year AS listing__ds__extract_year + , subq_6.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_6.listing__ds__extract_month AS listing__ds__extract_month + , subq_6.listing__ds__extract_day AS listing__ds__extract_day + , subq_6.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_6.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_6.listing__created_at__day AS listing__created_at__day + , subq_6.listing__created_at__week AS listing__created_at__week + , subq_6.listing__created_at__month AS listing__created_at__month + , subq_6.listing__created_at__quarter AS listing__created_at__quarter + , subq_6.listing__created_at__year AS listing__created_at__year + , subq_6.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_6.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_6.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_6.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_6.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_6.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing AS listing + , subq_6.user AS user + , subq_6.listing__user AS listing__user + , subq_6.country_latest AS country_latest + , subq_6.is_lux_latest AS is_lux_latest + , subq_6.capacity_latest AS capacity_latest + , subq_6.listing__country_latest AS listing__country_latest + , subq_6.listing__is_lux_latest AS listing__is_lux_latest + , subq_6.listing__capacity_latest AS listing__capacity_latest + , subq_6.listings AS listings + , subq_6.largest_listing AS largest_listing + , subq_6.smallest_listing AS smallest_listing + , subq_7.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + subq_5.metric_time__martian_day = subq_11.metric_time__martian_day +GROUP BY + COALESCE(subq_5.metric_time__martian_day, subq_11.metric_time__martian_day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..5bc9148a99 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,65 @@ +test_name: test_multiple_metrics_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_17.metric_time__martian_day, subq_23.metric_time__martian_day) AS metric_time__martian_day + , MAX(subq_17.bookings) AS bookings + , MAX(subq_23.listings) AS listings +FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_13.martian_day AS metric_time__martian_day + , SUM(subq_12.bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_13 + ON + subq_12.ds__day = subq_13.ds + GROUP BY + subq_13.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +FULL OUTER JOIN +( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['listings', 'metric_time__martian_day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_19.martian_day AS metric_time__martian_day + , SUM(subq_18.listings) AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , DATE_TRUNC('day', created_at) AS ds__day + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_19 + ON + subq_18.ds__day = subq_19.ds + GROUP BY + subq_19.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_23 +ON + subq_17.metric_time__martian_day = subq_23.metric_time__martian_day +GROUP BY + COALESCE(subq_17.metric_time__martian_day, subq_23.metric_time__martian_day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql new file mode 100644 index 0000000000..954d08ad9d --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql @@ -0,0 +1,452 @@ +test_name: test_no_metric_custom_granularity_joined_to_non_default_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__day', 'metric_time__martian_day', 'user__bio_added_ts__martian_day', 'user__bio_added_ts__month'] +SELECT + subq_6.user__bio_added_ts__martian_day + , subq_6.metric_time__martian_day + , subq_6.user__bio_added_ts__month + , subq_6.metric_time__day +FROM ( + -- Join Standard Outputs + -- Join to Custom Granularity Dataset + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond AS last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second AS last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute AS last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour AS last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day AS last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week AS last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month AS last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter AS last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year AS last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year AS last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter AS last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month AS last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day AS last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow AS last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy AS last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second AS bio_added_ts__second + , subq_0.bio_added_ts__minute AS bio_added_ts__minute + , subq_0.bio_added_ts__hour AS bio_added_ts__hour + , subq_0.bio_added_ts__day AS bio_added_ts__day + , subq_0.bio_added_ts__week AS bio_added_ts__week + , subq_0.bio_added_ts__month AS bio_added_ts__month + , subq_0.bio_added_ts__quarter AS bio_added_ts__quarter + , subq_0.bio_added_ts__year AS bio_added_ts__year + , subq_0.bio_added_ts__extract_year AS bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter AS bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month AS bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day AS bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow AS bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy AS bio_added_ts__extract_doy + , subq_0.last_login_ts__minute AS last_login_ts__minute + , subq_0.last_login_ts__hour AS last_login_ts__hour + , subq_0.last_login_ts__day AS last_login_ts__day + , subq_0.last_login_ts__week AS last_login_ts__week + , subq_0.last_login_ts__month AS last_login_ts__month + , subq_0.last_login_ts__quarter AS last_login_ts__quarter + , subq_0.last_login_ts__year AS last_login_ts__year + , subq_0.last_login_ts__extract_year AS last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter AS last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month AS last_login_ts__extract_month + , subq_0.last_login_ts__extract_day AS last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow AS last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy AS last_login_ts__extract_doy + , subq_0.archived_at__hour AS archived_at__hour + , subq_0.archived_at__day AS archived_at__day + , subq_0.archived_at__week AS archived_at__week + , subq_0.archived_at__month AS archived_at__month + , subq_0.archived_at__quarter AS archived_at__quarter + , subq_0.archived_at__year AS archived_at__year + , subq_0.archived_at__extract_year AS archived_at__extract_year + , subq_0.archived_at__extract_quarter AS archived_at__extract_quarter + , subq_0.archived_at__extract_month AS archived_at__extract_month + , subq_0.archived_at__extract_day AS archived_at__extract_day + , subq_0.archived_at__extract_dow AS archived_at__extract_dow + , subq_0.archived_at__extract_doy AS archived_at__extract_doy + , subq_0.user__ds__day AS user__ds__day + , subq_0.user__ds__week AS user__ds__week + , subq_0.user__ds__month AS user__ds__month + , subq_0.user__ds__quarter AS user__ds__quarter + , subq_0.user__ds__year AS user__ds__year + , subq_0.user__ds__extract_year AS user__ds__extract_year + , subq_0.user__ds__extract_quarter AS user__ds__extract_quarter + , subq_0.user__ds__extract_month AS user__ds__extract_month + , subq_0.user__ds__extract_day AS user__ds__extract_day + , subq_0.user__ds__extract_dow AS user__ds__extract_dow + , subq_0.user__ds__extract_doy AS user__ds__extract_doy + , subq_0.user__created_at__day AS user__created_at__day + , subq_0.user__created_at__week AS user__created_at__week + , subq_0.user__created_at__month AS user__created_at__month + , subq_0.user__created_at__quarter AS user__created_at__quarter + , subq_0.user__created_at__year AS user__created_at__year + , subq_0.user__created_at__extract_year AS user__created_at__extract_year + , subq_0.user__created_at__extract_quarter AS user__created_at__extract_quarter + , subq_0.user__created_at__extract_month AS user__created_at__extract_month + , subq_0.user__created_at__extract_day AS user__created_at__extract_day + , subq_0.user__created_at__extract_dow AS user__created_at__extract_dow + , subq_0.user__created_at__extract_doy AS user__created_at__extract_doy + , subq_0.user__ds_partitioned__day AS user__ds_partitioned__day + , subq_0.user__ds_partitioned__week AS user__ds_partitioned__week + , subq_0.user__ds_partitioned__month AS user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year AS user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second AS user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute AS user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour AS user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day AS user__bio_added_ts__day + , subq_0.user__bio_added_ts__week AS user__bio_added_ts__week + , subq_0.user__bio_added_ts__month AS user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year AS user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute AS user__last_login_ts__minute + , subq_0.user__last_login_ts__hour AS user__last_login_ts__hour + , subq_0.user__last_login_ts__day AS user__last_login_ts__day + , subq_0.user__last_login_ts__week AS user__last_login_ts__week + , subq_0.user__last_login_ts__month AS user__last_login_ts__month + , subq_0.user__last_login_ts__quarter AS user__last_login_ts__quarter + , subq_0.user__last_login_ts__year AS user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour AS user__archived_at__hour + , subq_0.user__archived_at__day AS user__archived_at__day + , subq_0.user__archived_at__week AS user__archived_at__week + , subq_0.user__archived_at__month AS user__archived_at__month + , subq_0.user__archived_at__quarter AS user__archived_at__quarter + , subq_0.user__archived_at__year AS user__archived_at__year + , subq_0.user__archived_at__extract_year AS user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month AS user__archived_at__extract_month + , subq_0.user__archived_at__extract_day AS user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow AS user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy AS user__archived_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_0.user AS user + , subq_0.home_state AS home_state + , subq_0.user__home_state AS user__home_state + , subq_0.new_users AS new_users + , subq_0.archived_users AS archived_users + , subq_4.martian_day AS metric_time__martian_day + , subq_5.martian_day AS user__bio_added_ts__martian_day + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + CROSS JOIN + ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_2.metric_time__day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds__martian_day + , subq_1.ds__day AS metric_time__day + , subq_1.ds__week AS metric_time__week + , subq_1.ds__month AS metric_time__month + , subq_1.ds__quarter AS metric_time__quarter + , subq_1.ds__year AS metric_time__year + , subq_1.ds__extract_year AS metric_time__extract_year + , subq_1.ds__extract_quarter AS metric_time__extract_quarter + , subq_1.ds__extract_month AS metric_time__extract_month + , subq_1.ds__extract_day AS metric_time__extract_day + , subq_1.ds__extract_dow AS metric_time__extract_dow + , subq_1.ds__extract_doy AS metric_time__extract_doy + , subq_1.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_4 + ON + subq_3.metric_time__day = subq_4.ds + LEFT OUTER JOIN + ***************************.mf_time_spine subq_5 + ON + subq_0.user__bio_added_ts__day = subq_5.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + subq_6.user__bio_added_ts__martian_day + , subq_6.metric_time__martian_day + , subq_6.user__bio_added_ts__month + , subq_6.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..d01dbdbcc6 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql @@ -0,0 +1,30 @@ +test_name: test_no_metric_custom_granularity_joined_to_non_default_grain +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Join to Custom Granularity Dataset +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['metric_time__day', 'metric_time__martian_day', 'user__bio_added_ts__martian_day', 'user__bio_added_ts__month'] +SELECT + subq_12.martian_day AS user__bio_added_ts__martian_day + , subq_11.martian_day AS metric_time__martian_day + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , time_spine_src_28006.ds AS metric_time__day +FROM ***************************.dim_users users_ds_source_src_28000 +CROSS JOIN + ***************************.mf_time_spine time_spine_src_28006 +LEFT OUTER JOIN + ***************************.mf_time_spine subq_11 +ON + time_spine_src_28006.ds = subq_11.ds +LEFT OUTER JOIN + ***************************.mf_time_spine subq_12 +ON + DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) = subq_12.ds +GROUP BY + subq_12.martian_day + , subq_11.martian_day + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) + , time_spine_src_28006.ds +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql new file mode 100644 index 0000000000..961d056b61 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql @@ -0,0 +1,63 @@ +test_name: test_no_metric_custom_granularity_metric_time +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__martian_day',] +SELECT + subq_2.metric_time__martian_day +FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds__martian_day AS ds__martian_day + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.ds__martian_day AS metric_time__martian_day + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + subq_2.metric_time__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..6e0bad8837 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql @@ -0,0 +1,17 @@ +test_name: test_no_metric_custom_granularity_metric_time +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Metric Time Dimension 'ds' +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['metric_time__martian_day',] +SELECT + subq_4.martian_day AS metric_time__martian_day +FROM ***************************.mf_time_spine time_spine_src_28006 +LEFT OUTER JOIN + ***************************.mf_time_spine subq_4 +ON + time_spine_src_28006.ds = subq_4.ds +GROUP BY + subq_4.martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql new file mode 100644 index 0000000000..3b17dcd9b7 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql @@ -0,0 +1,110 @@ +test_name: test_no_metric_custom_granularity_non_metric_time +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['booking__ds__martian_day',] +SELECT + subq_1.booking__ds__martian_day +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Join to Custom Granularity Dataset + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value AS booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant AS is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + , subq_0.martian_day AS booking__ds__martian_day + FROM ***************************.fct_bookings bookings_source_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_0 + ON + DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_0.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +GROUP BY + subq_1.booking__ds__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..298885f0eb --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql @@ -0,0 +1,17 @@ +test_name: test_no_metric_custom_granularity_non_metric_time +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['booking__ds__martian_day',] +SELECT + subq_2.martian_day AS booking__ds__martian_day +FROM ***************************.fct_bookings bookings_source_src_28000 +LEFT OUTER JOIN + ***************************.mf_time_spine subq_2 +ON + DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_2.ds +GROUP BY + subq_2.martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql new file mode 100644 index 0000000000..5305f83ed2 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql @@ -0,0 +1,143 @@ +test_name: test_no_metrics_with_custom_granularity_filter +test_filename: test_custom_granularity.py +docstring: + Group by items only queried with a filter on a custom grain, where that grain is not used in the group by. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['listing__ds__day',] +SELECT + subq_2.listing__ds__day +FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.listing__ds__martian_day + , subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.created_at__day + , subq_1.created_at__week + , subq_1.created_at__month + , subq_1.created_at__quarter + , subq_1.created_at__year + , subq_1.created_at__extract_year + , subq_1.created_at__extract_quarter + , subq_1.created_at__extract_month + , subq_1.created_at__extract_day + , subq_1.created_at__extract_dow + , subq_1.created_at__extract_doy + , subq_1.listing__ds__day + , subq_1.listing__ds__week + , subq_1.listing__ds__month + , subq_1.listing__ds__quarter + , subq_1.listing__ds__year + , subq_1.listing__ds__extract_year + , subq_1.listing__ds__extract_quarter + , subq_1.listing__ds__extract_month + , subq_1.listing__ds__extract_day + , subq_1.listing__ds__extract_dow + , subq_1.listing__ds__extract_doy + , subq_1.listing__created_at__day + , subq_1.listing__created_at__week + , subq_1.listing__created_at__month + , subq_1.listing__created_at__quarter + , subq_1.listing__created_at__year + , subq_1.listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month + , subq_1.listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy + , subq_1.listing + , subq_1.user + , subq_1.listing__user + , subq_1.country_latest + , subq_1.is_lux_latest + , subq_1.capacity_latest + , subq_1.listing__country_latest + , subq_1.listing__is_lux_latest + , subq_1.listing__capacity_latest + , subq_1.listings + , subq_1.largest_listing + , subq_1.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Join to Custom Granularity Dataset + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + , subq_0.martian_day AS listing__ds__martian_day + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_0 + ON + DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_0.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE listing__ds__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + subq_2.listing__ds__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql new file mode 100644 index 0000000000..6e47c9df8a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql @@ -0,0 +1,27 @@ +test_name: test_no_metrics_with_custom_granularity_filter +test_filename: test_custom_granularity.py +docstring: + Group by items only queried with a filter on a custom grain, where that grain is not used in the group by. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listing__ds__day',] +SELECT + listing__ds__day +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Join to Custom Granularity Dataset + SELECT + DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , subq_3.martian_day AS listing__ds__martian_day + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_3 + ON + DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_3.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +WHERE listing__ds__martian_day = '2020-01-01' +GROUP BY + listing__ds__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql new file mode 100644 index 0000000000..55cc7cf748 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -0,0 +1,143 @@ +test_name: test_no_metrics_with_custom_granularity_in_filter_and_group_by +test_filename: test_custom_granularity.py +docstring: + Group by items only queried with a filter on a custom grain, where that grain is also used in the group by. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['listing__ds__martian_day',] +SELECT + subq_2.listing__ds__martian_day +FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.listing__ds__martian_day + , subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.created_at__day + , subq_1.created_at__week + , subq_1.created_at__month + , subq_1.created_at__quarter + , subq_1.created_at__year + , subq_1.created_at__extract_year + , subq_1.created_at__extract_quarter + , subq_1.created_at__extract_month + , subq_1.created_at__extract_day + , subq_1.created_at__extract_dow + , subq_1.created_at__extract_doy + , subq_1.listing__ds__day + , subq_1.listing__ds__week + , subq_1.listing__ds__month + , subq_1.listing__ds__quarter + , subq_1.listing__ds__year + , subq_1.listing__ds__extract_year + , subq_1.listing__ds__extract_quarter + , subq_1.listing__ds__extract_month + , subq_1.listing__ds__extract_day + , subq_1.listing__ds__extract_dow + , subq_1.listing__ds__extract_doy + , subq_1.listing__created_at__day + , subq_1.listing__created_at__week + , subq_1.listing__created_at__month + , subq_1.listing__created_at__quarter + , subq_1.listing__created_at__year + , subq_1.listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month + , subq_1.listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy + , subq_1.listing + , subq_1.user + , subq_1.listing__user + , subq_1.country_latest + , subq_1.is_lux_latest + , subq_1.capacity_latest + , subq_1.listing__country_latest + , subq_1.listing__is_lux_latest + , subq_1.listing__capacity_latest + , subq_1.listings + , subq_1.largest_listing + , subq_1.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Join to Custom Granularity Dataset + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + , subq_0.martian_day AS listing__ds__martian_day + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_0 + ON + DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_0.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE listing__ds__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + subq_2.listing__ds__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..3832094b3c --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -0,0 +1,26 @@ +test_name: test_no_metrics_with_custom_granularity_in_filter_and_group_by +test_filename: test_custom_granularity.py +docstring: + Group by items only queried with a filter on a custom grain, where that grain is also used in the group by. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listing__ds__martian_day',] +SELECT + listing__ds__martian_day +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Join to Custom Granularity Dataset + SELECT + subq_3.martian_day AS listing__ds__martian_day + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_3 + ON + DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_3.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +WHERE listing__ds__martian_day = '2020-01-01' +GROUP BY + listing__ds__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..082103dc37 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql @@ -0,0 +1,382 @@ +test_name: test_offset_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.booking__ds__martian_day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.booking__ds__martian_day + , subq_8.bookings AS bookings_5_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_7.booking__ds__martian_day + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__martian_day'] + SELECT + subq_6.booking__ds__martian_day + , subq_6.bookings + FROM ( + -- Join to Time Spine Dataset + -- Join to Custom Granularity Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.booking__ds__day AS booking__ds__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_5.martian_day AS booking__ds__martian_day + FROM ( + -- Pass Only Elements: ['booking__ds__day',] + SELECT + subq_3.booking__ds__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS booking__ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.booking__ds__day, CAST(-5 AS Integer)) = subq_1.booking__ds__day + LEFT OUTER JOIN + ***************************.mf_time_spine subq_5 + ON + subq_4.booking__ds__day = subq_5.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.booking__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..439f71e887 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,39 @@ +test_name: test_offset_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + booking__ds__martian_day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Join to Time Spine Dataset + -- Join to Custom Granularity Dataset + -- Pass Only Elements: ['bookings', 'booking__ds__martian_day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_15.martian_day AS booking__ds__martian_day + , SUM(subq_11.bookings) AS bookings_5_days_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS booking__ds__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_11.booking__ds__day + LEFT OUTER JOIN + ***************************.mf_time_spine subq_15 + ON + time_spine_src_28006.ds = subq_15.ds + GROUP BY + subq_15.martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql new file mode 100644 index 0000000000..b424c735fb --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -0,0 +1,487 @@ +test_name: test_offset_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_9.metric_time__day + , subq_9.bookings AS bookings_5_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , SUM(subq_8.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.metric_time__martian_day + , subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds_partitioned__day + , subq_6.ds_partitioned__week + , subq_6.ds_partitioned__month + , subq_6.ds_partitioned__quarter + , subq_6.ds_partitioned__year + , subq_6.ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy + , subq_6.paid_at__day + , subq_6.paid_at__week + , subq_6.paid_at__month + , subq_6.paid_at__quarter + , subq_6.paid_at__year + , subq_6.paid_at__extract_year + , subq_6.paid_at__extract_quarter + , subq_6.paid_at__extract_month + , subq_6.paid_at__extract_day + , subq_6.paid_at__extract_dow + , subq_6.paid_at__extract_doy + , subq_6.booking__ds__day + , subq_6.booking__ds__week + , subq_6.booking__ds__month + , subq_6.booking__ds__quarter + , subq_6.booking__ds__year + , subq_6.booking__ds__extract_year + , subq_6.booking__ds__extract_quarter + , subq_6.booking__ds__extract_month + , subq_6.booking__ds__extract_day + , subq_6.booking__ds__extract_dow + , subq_6.booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day + , subq_6.booking__paid_at__week + , subq_6.booking__paid_at__month + , subq_6.booking__paid_at__quarter + , subq_6.booking__paid_at__year + , subq_6.booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy + , subq_6.metric_time__week + , subq_6.metric_time__month + , subq_6.metric_time__quarter + , subq_6.metric_time__year + , subq_6.metric_time__extract_year + , subq_6.metric_time__extract_quarter + , subq_6.metric_time__extract_month + , subq_6.metric_time__extract_day + , subq_6.metric_time__extract_dow + , subq_6.metric_time__extract_doy + , subq_6.metric_time__day + , subq_6.listing + , subq_6.guest + , subq_6.host + , subq_6.booking__listing + , subq_6.booking__guest + , subq_6.booking__host + , subq_6.is_instant + , subq_6.booking__is_instant + , subq_6.bookings + , subq_6.instant_bookings + , subq_6.booking_value + , subq_6.max_booking_value + , subq_6.min_booking_value + , subq_6.bookers + , subq_6.average_booking_value + , subq_6.referred_bookings + , subq_6.median_booking_value + , subq_6.booking_value_p99 + , subq_6.discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + -- Join to Custom Granularity Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_5.martian_day AS metric_time__martian_day + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + LEFT OUTER JOIN + ***************************.mf_time_spine subq_5 + ON + subq_4.metric_time__day = subq_5.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..3194c89c8e --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -0,0 +1,48 @@ +test_name: test_offset_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings_5_days_ago + FROM ( + -- Join to Time Spine Dataset + -- Join to Custom Granularity Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_12.bookings AS bookings + , subq_16.martian_day AS metric_time__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + ON + addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_12.metric_time__day + LEFT OUTER JOIN + ***************************.mf_time_spine subq_16 + ON + time_spine_src_28006.ds = subq_16.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + WHERE metric_time__martian_day = '2020-01-01' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql new file mode 100644 index 0000000000..9f18f45247 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql @@ -0,0 +1,228 @@ +test_name: test_simple_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_4.booking__ds__martian_day + , subq_4.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_3.booking__ds__martian_day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__martian_day'] + SELECT + subq_2.booking__ds__martian_day + , subq_2.bookings + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS booking__ds__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.booking__ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.booking__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..3864c18a61 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql @@ -0,0 +1,27 @@ +test_name: test_simple_metric_with_custom_granularity +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Metric Time Dimension 'ds' +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['bookings', 'booking__ds__martian_day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_6.martian_day AS booking__ds__martian_day + , SUM(subq_5.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS booking__ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +LEFT OUTER JOIN + ***************************.mf_time_spine subq_6 +ON + subq_5.booking__ds__day = subq_6.ds +GROUP BY + subq_6.martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql new file mode 100644 index 0000000000..a82020fa5a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql @@ -0,0 +1,476 @@ +test_name: test_simple_metric_with_custom_granularity_and_join +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.listing__ds__martian_day + , subq_8.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_7.listing__ds__martian_day + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__ds__martian_day'] + SELECT + subq_6.listing__ds__martian_day + , subq_6.bookings + FROM ( + -- Join Standard Outputs + -- Join to Custom Granularity Dataset + SELECT + subq_4.ds__day AS listing__ds__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_5.martian_day AS listing__ds__martian_day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['ds__day', 'listing'] + SELECT + subq_3.ds__day + , subq_3.listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + LEFT OUTER JOIN + ***************************.mf_time_spine subq_5 + ON + subq_4.ds__day = subq_5.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.listing__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql new file mode 100644 index 0000000000..eb2742ca5f --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql @@ -0,0 +1,32 @@ +test_name: test_simple_metric_with_custom_granularity_and_join +test_filename: test_custom_granularity.py +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['bookings', 'listing__ds__martian_day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_14.martian_day AS listing__ds__martian_day + , SUM(subq_10.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 +ON + subq_10.listing = listings_latest_src_28000.listing_id +LEFT OUTER JOIN + ***************************.mf_time_spine subq_14 +ON + DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_14.ds +GROUP BY + subq_14.martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql new file mode 100644 index 0000000000..1e861e2977 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql @@ -0,0 +1,330 @@ +test_name: test_simple_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +docstring: + Simple metric queried with a filter on a custom grain, where that grain is not used in the group by. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_3.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql new file mode 100644 index 0000000000..e138f8e9ab --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_simple_metric_with_custom_granularity_filter +test_filename: test_custom_granularity.py +docstring: + Simple metric queried with a filter on a custom grain, where that grain is not used in the group by. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS bookings +FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.bookings AS bookings + , subq_7.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +WHERE metric_time__martian_day = '2020-01-01' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql new file mode 100644 index 0000000000..b6f4fec67a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -0,0 +1,335 @@ +test_name: test_simple_metric_with_custom_granularity_in_filter_and_group_by +test_filename: test_custom_granularity.py +docstring: + Simple metric queried with a filter on a custom grain, where that grain is also used in the group by. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.metric_time__martian_day + , subq_5.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_4.metric_time__martian_day + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] + SELECT + subq_3.metric_time__martian_day + , subq_3.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.metric_time__martian_day + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_partitioned__day AS ds_partitioned__day + , subq_0.ds_partitioned__week AS ds_partitioned__week + , subq_0.ds_partitioned__month AS ds_partitioned__month + , subq_0.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_0.ds_partitioned__year AS ds_partitioned__year + , subq_0.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_0.paid_at__day AS paid_at__day + , subq_0.paid_at__week AS paid_at__week + , subq_0.paid_at__month AS paid_at__month + , subq_0.paid_at__quarter AS paid_at__quarter + , subq_0.paid_at__year AS paid_at__year + , subq_0.paid_at__extract_year AS paid_at__extract_year + , subq_0.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_0.paid_at__extract_month AS paid_at__extract_month + , subq_0.paid_at__extract_day AS paid_at__extract_day + , subq_0.paid_at__extract_dow AS paid_at__extract_dow + , subq_0.paid_at__extract_doy AS paid_at__extract_doy + , subq_0.booking__ds__day AS booking__ds__day + , subq_0.booking__ds__week AS booking__ds__week + , subq_0.booking__ds__month AS booking__ds__month + , subq_0.booking__ds__quarter AS booking__ds__quarter + , subq_0.booking__ds__year AS booking__ds__year + , subq_0.booking__ds__extract_year AS booking__ds__extract_year + , subq_0.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_0.booking__ds__extract_month AS booking__ds__extract_month + , subq_0.booking__ds__extract_day AS booking__ds__extract_day + , subq_0.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_0.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day AS booking__paid_at__day + , subq_0.booking__paid_at__week AS booking__paid_at__week + , subq_0.booking__paid_at__month AS booking__paid_at__month + , subq_0.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_0.booking__paid_at__year AS booking__paid_at__year + , subq_0.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing AS listing + , subq_0.guest AS guest + , subq_0.host AS host + , subq_0.booking__listing AS booking__listing + , subq_0.booking__guest AS booking__guest + , subq_0.booking__host AS booking__host + , subq_0.is_instant AS is_instant + , subq_0.booking__is_instant AS booking__is_instant + , subq_0.bookings AS bookings + , subq_0.instant_bookings AS instant_bookings + , subq_0.booking_value AS booking_value + , subq_0.max_booking_value AS max_booking_value + , subq_0.min_booking_value AS min_booking_value + , subq_0.bookers AS bookers + , subq_0.average_booking_value AS average_booking_value + , subq_0.referred_bookings AS referred_bookings + , subq_0.median_booking_value AS median_booking_value + , subq_0.booking_value_p99 AS booking_value_p99 + , subq_0.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_1.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_1 + ON + subq_0.ds__day = subq_1.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__martian_day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..866b58962a --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -0,0 +1,37 @@ +test_name: test_simple_metric_with_custom_granularity_in_filter_and_group_by +test_filename: test_custom_granularity.py +docstring: + Simple metric queried with a filter on a custom grain, where that grain is also used in the group by. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'metric_time__martian_day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__martian_day + , SUM(bookings) AS bookings +FROM ( + -- Metric Time Dimension 'ds' + -- Join to Custom Granularity Dataset + SELECT + subq_6.bookings AS bookings + , subq_7.martian_day AS metric_time__martian_day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , DATE_TRUNC('day', ds) AS ds__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ***************************.mf_time_spine subq_7 + ON + subq_6.ds__day = subq_7.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +WHERE metric_time__martian_day = '2020-01-01' +GROUP BY + metric_time__martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql new file mode 100644 index 0000000000..df082e8324 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql @@ -0,0 +1,1419 @@ +test_name: test_simple_metric_with_multi_hop_custom_granularity +test_filename: test_custom_granularity.py +docstring: + Test simple metric with a multi hop dimension and custom grain. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_12.listing__user__ds__martian_day + , subq_12.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_11.listing__user__ds__martian_day + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__user__ds__martian_day'] + SELECT + subq_10.listing__user__ds__martian_day + , subq_10.bookings + FROM ( + -- Join Standard Outputs + -- Join to Custom Granularity Dataset + SELECT + subq_8.user__ds__day AS listing__user__ds__day + , subq_8.user__ds_partitioned__day AS listing__user__ds_partitioned__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + , subq_9.martian_day AS listing__user__ds__martian_day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['user__ds_partitioned__day', 'user__ds__day', 'listing'] + SELECT + subq_7.user__ds__day + , subq_7.user__ds_partitioned__day + , subq_7.listing + FROM ( + -- Join Standard Outputs + SELECT + subq_6.home_state AS user__home_state + , subq_6.ds__day AS user__ds__day + , subq_6.ds__week AS user__ds__week + , subq_6.ds__month AS user__ds__month + , subq_6.ds__quarter AS user__ds__quarter + , subq_6.ds__year AS user__ds__year + , subq_6.ds__extract_year AS user__ds__extract_year + , subq_6.ds__extract_quarter AS user__ds__extract_quarter + , subq_6.ds__extract_month AS user__ds__extract_month + , subq_6.ds__extract_day AS user__ds__extract_day + , subq_6.ds__extract_dow AS user__ds__extract_dow + , subq_6.ds__extract_doy AS user__ds__extract_doy + , subq_6.created_at__day AS user__created_at__day + , subq_6.created_at__week AS user__created_at__week + , subq_6.created_at__month AS user__created_at__month + , subq_6.created_at__quarter AS user__created_at__quarter + , subq_6.created_at__year AS user__created_at__year + , subq_6.created_at__extract_year AS user__created_at__extract_year + , subq_6.created_at__extract_quarter AS user__created_at__extract_quarter + , subq_6.created_at__extract_month AS user__created_at__extract_month + , subq_6.created_at__extract_day AS user__created_at__extract_day + , subq_6.created_at__extract_dow AS user__created_at__extract_dow + , subq_6.created_at__extract_doy AS user__created_at__extract_doy + , subq_6.ds_partitioned__day AS user__ds_partitioned__day + , subq_6.ds_partitioned__week AS user__ds_partitioned__week + , subq_6.ds_partitioned__month AS user__ds_partitioned__month + , subq_6.ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_6.ds_partitioned__year AS user__ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_6.last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_6.last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_6.last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_6.last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_6.last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_6.last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_6.last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_6.last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_6.last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_6.last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_6.last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_6.last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_6.last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_6.last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_6.last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_6.bio_added_ts__second AS user__bio_added_ts__second + , subq_6.bio_added_ts__minute AS user__bio_added_ts__minute + , subq_6.bio_added_ts__hour AS user__bio_added_ts__hour + , subq_6.bio_added_ts__day AS user__bio_added_ts__day + , subq_6.bio_added_ts__week AS user__bio_added_ts__week + , subq_6.bio_added_ts__month AS user__bio_added_ts__month + , subq_6.bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_6.bio_added_ts__year AS user__bio_added_ts__year + , subq_6.bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_6.bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_6.bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_6.bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_6.bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_6.bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_6.last_login_ts__minute AS user__last_login_ts__minute + , subq_6.last_login_ts__hour AS user__last_login_ts__hour + , subq_6.last_login_ts__day AS user__last_login_ts__day + , subq_6.last_login_ts__week AS user__last_login_ts__week + , subq_6.last_login_ts__month AS user__last_login_ts__month + , subq_6.last_login_ts__quarter AS user__last_login_ts__quarter + , subq_6.last_login_ts__year AS user__last_login_ts__year + , subq_6.last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_6.last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_6.last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_6.last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_6.last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_6.last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_6.archived_at__hour AS user__archived_at__hour + , subq_6.archived_at__day AS user__archived_at__day + , subq_6.archived_at__week AS user__archived_at__week + , subq_6.archived_at__month AS user__archived_at__month + , subq_6.archived_at__quarter AS user__archived_at__quarter + , subq_6.archived_at__year AS user__archived_at__year + , subq_6.archived_at__extract_year AS user__archived_at__extract_year + , subq_6.archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_6.archived_at__extract_month AS user__archived_at__extract_month + , subq_6.archived_at__extract_day AS user__archived_at__extract_day + , subq_6.archived_at__extract_dow AS user__archived_at__extract_dow + , subq_6.archived_at__extract_doy AS user__archived_at__extract_doy + , subq_6.metric_time__day AS user__metric_time__day + , subq_6.metric_time__week AS user__metric_time__week + , subq_6.metric_time__month AS user__metric_time__month + , subq_6.metric_time__quarter AS user__metric_time__quarter + , subq_6.metric_time__year AS user__metric_time__year + , subq_6.metric_time__extract_year AS user__metric_time__extract_year + , subq_6.metric_time__extract_quarter AS user__metric_time__extract_quarter + , subq_6.metric_time__extract_month AS user__metric_time__extract_month + , subq_6.metric_time__extract_day AS user__metric_time__extract_day + , subq_6.metric_time__extract_dow AS user__metric_time__extract_dow + , subq_6.metric_time__extract_doy AS user__metric_time__extract_doy + , subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.created_at__day AS created_at__day + , subq_3.created_at__week AS created_at__week + , subq_3.created_at__month AS created_at__month + , subq_3.created_at__quarter AS created_at__quarter + , subq_3.created_at__year AS created_at__year + , subq_3.created_at__extract_year AS created_at__extract_year + , subq_3.created_at__extract_quarter AS created_at__extract_quarter + , subq_3.created_at__extract_month AS created_at__extract_month + , subq_3.created_at__extract_day AS created_at__extract_day + , subq_3.created_at__extract_dow AS created_at__extract_dow + , subq_3.created_at__extract_doy AS created_at__extract_doy + , subq_3.listing__ds__day AS listing__ds__day + , subq_3.listing__ds__week AS listing__ds__week + , subq_3.listing__ds__month AS listing__ds__month + , subq_3.listing__ds__quarter AS listing__ds__quarter + , subq_3.listing__ds__year AS listing__ds__year + , subq_3.listing__ds__extract_year AS listing__ds__extract_year + , subq_3.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_3.listing__ds__extract_month AS listing__ds__extract_month + , subq_3.listing__ds__extract_day AS listing__ds__extract_day + , subq_3.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_3.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_3.listing__created_at__day AS listing__created_at__day + , subq_3.listing__created_at__week AS listing__created_at__week + , subq_3.listing__created_at__month AS listing__created_at__month + , subq_3.listing__created_at__quarter AS listing__created_at__quarter + , subq_3.listing__created_at__year AS listing__created_at__year + , subq_3.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_3.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_3.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_3.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_3.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_3.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_3.metric_time__week AS metric_time__week + , subq_3.metric_time__month AS metric_time__month + , subq_3.metric_time__quarter AS metric_time__quarter + , subq_3.metric_time__year AS metric_time__year + , subq_3.metric_time__extract_year AS metric_time__extract_year + , subq_3.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_3.metric_time__extract_month AS metric_time__extract_month + , subq_3.metric_time__extract_day AS metric_time__extract_day + , subq_3.metric_time__extract_dow AS metric_time__extract_dow + , subq_3.metric_time__extract_doy AS metric_time__extract_doy + , subq_3.listing AS listing + , subq_3.user AS user + , subq_3.listing__user AS listing__user + , subq_3.country_latest AS country_latest + , subq_3.is_lux_latest AS is_lux_latest + , subq_3.capacity_latest AS capacity_latest + , subq_3.listing__country_latest AS listing__country_latest + , subq_3.listing__is_lux_latest AS listing__is_lux_latest + , subq_3.listing__capacity_latest AS listing__capacity_latest + , subq_3.listings AS listings + , subq_3.largest_listing AS largest_listing + , subq_3.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'home_state', + -- 'user__home_state', + -- 'ds__day', + -- 'ds__week', + -- 'ds__month', + -- 'ds__quarter', + -- 'ds__year', + -- 'ds__extract_year', + -- 'ds__extract_quarter', + -- 'ds__extract_month', + -- 'ds__extract_day', + -- 'ds__extract_dow', + -- 'ds__extract_doy', + -- 'created_at__day', + -- 'created_at__week', + -- 'created_at__month', + -- 'created_at__quarter', + -- 'created_at__year', + -- 'created_at__extract_year', + -- 'created_at__extract_quarter', + -- 'created_at__extract_month', + -- 'created_at__extract_day', + -- 'created_at__extract_dow', + -- 'created_at__extract_doy', + -- 'ds_partitioned__day', + -- 'ds_partitioned__week', + -- 'ds_partitioned__month', + -- 'ds_partitioned__quarter', + -- 'ds_partitioned__year', + -- 'ds_partitioned__extract_year', + -- 'ds_partitioned__extract_quarter', + -- 'ds_partitioned__extract_month', + -- 'ds_partitioned__extract_day', + -- 'ds_partitioned__extract_dow', + -- 'ds_partitioned__extract_doy', + -- 'last_profile_edit_ts__millisecond', + -- 'last_profile_edit_ts__second', + -- 'last_profile_edit_ts__minute', + -- 'last_profile_edit_ts__hour', + -- 'last_profile_edit_ts__day', + -- 'last_profile_edit_ts__week', + -- 'last_profile_edit_ts__month', + -- 'last_profile_edit_ts__quarter', + -- 'last_profile_edit_ts__year', + -- 'last_profile_edit_ts__extract_year', + -- 'last_profile_edit_ts__extract_quarter', + -- 'last_profile_edit_ts__extract_month', + -- 'last_profile_edit_ts__extract_day', + -- 'last_profile_edit_ts__extract_dow', + -- 'last_profile_edit_ts__extract_doy', + -- 'bio_added_ts__second', + -- 'bio_added_ts__minute', + -- 'bio_added_ts__hour', + -- 'bio_added_ts__day', + -- 'bio_added_ts__week', + -- 'bio_added_ts__month', + -- 'bio_added_ts__quarter', + -- 'bio_added_ts__year', + -- 'bio_added_ts__extract_year', + -- 'bio_added_ts__extract_quarter', + -- 'bio_added_ts__extract_month', + -- 'bio_added_ts__extract_day', + -- 'bio_added_ts__extract_dow', + -- 'bio_added_ts__extract_doy', + -- 'last_login_ts__minute', + -- 'last_login_ts__hour', + -- 'last_login_ts__day', + -- 'last_login_ts__week', + -- 'last_login_ts__month', + -- 'last_login_ts__quarter', + -- 'last_login_ts__year', + -- 'last_login_ts__extract_year', + -- 'last_login_ts__extract_quarter', + -- 'last_login_ts__extract_month', + -- 'last_login_ts__extract_day', + -- 'last_login_ts__extract_dow', + -- 'last_login_ts__extract_doy', + -- 'archived_at__hour', + -- 'archived_at__day', + -- 'archived_at__week', + -- 'archived_at__month', + -- 'archived_at__quarter', + -- 'archived_at__year', + -- 'archived_at__extract_year', + -- 'archived_at__extract_quarter', + -- 'archived_at__extract_month', + -- 'archived_at__extract_day', + -- 'archived_at__extract_dow', + -- 'archived_at__extract_doy', + -- 'user__ds__day', + -- 'user__ds__week', + -- 'user__ds__month', + -- 'user__ds__quarter', + -- 'user__ds__year', + -- 'user__ds__extract_year', + -- 'user__ds__extract_quarter', + -- 'user__ds__extract_month', + -- 'user__ds__extract_day', + -- 'user__ds__extract_dow', + -- 'user__ds__extract_doy', + -- 'user__created_at__day', + -- 'user__created_at__week', + -- 'user__created_at__month', + -- 'user__created_at__quarter', + -- 'user__created_at__year', + -- 'user__created_at__extract_year', + -- 'user__created_at__extract_quarter', + -- 'user__created_at__extract_month', + -- 'user__created_at__extract_day', + -- 'user__created_at__extract_dow', + -- 'user__created_at__extract_doy', + -- 'user__ds_partitioned__day', + -- 'user__ds_partitioned__week', + -- 'user__ds_partitioned__month', + -- 'user__ds_partitioned__quarter', + -- 'user__ds_partitioned__year', + -- 'user__ds_partitioned__extract_year', + -- 'user__ds_partitioned__extract_quarter', + -- 'user__ds_partitioned__extract_month', + -- 'user__ds_partitioned__extract_day', + -- 'user__ds_partitioned__extract_dow', + -- 'user__ds_partitioned__extract_doy', + -- 'user__last_profile_edit_ts__millisecond', + -- 'user__last_profile_edit_ts__second', + -- 'user__last_profile_edit_ts__minute', + -- 'user__last_profile_edit_ts__hour', + -- 'user__last_profile_edit_ts__day', + -- 'user__last_profile_edit_ts__week', + -- 'user__last_profile_edit_ts__month', + -- 'user__last_profile_edit_ts__quarter', + -- 'user__last_profile_edit_ts__year', + -- 'user__last_profile_edit_ts__extract_year', + -- 'user__last_profile_edit_ts__extract_quarter', + -- 'user__last_profile_edit_ts__extract_month', + -- 'user__last_profile_edit_ts__extract_day', + -- 'user__last_profile_edit_ts__extract_dow', + -- 'user__last_profile_edit_ts__extract_doy', + -- 'user__bio_added_ts__second', + -- 'user__bio_added_ts__minute', + -- 'user__bio_added_ts__hour', + -- 'user__bio_added_ts__day', + -- 'user__bio_added_ts__week', + -- 'user__bio_added_ts__month', + -- 'user__bio_added_ts__quarter', + -- 'user__bio_added_ts__year', + -- 'user__bio_added_ts__extract_year', + -- 'user__bio_added_ts__extract_quarter', + -- 'user__bio_added_ts__extract_month', + -- 'user__bio_added_ts__extract_day', + -- 'user__bio_added_ts__extract_dow', + -- 'user__bio_added_ts__extract_doy', + -- 'user__last_login_ts__minute', + -- 'user__last_login_ts__hour', + -- 'user__last_login_ts__day', + -- 'user__last_login_ts__week', + -- 'user__last_login_ts__month', + -- 'user__last_login_ts__quarter', + -- 'user__last_login_ts__year', + -- 'user__last_login_ts__extract_year', + -- 'user__last_login_ts__extract_quarter', + -- 'user__last_login_ts__extract_month', + -- 'user__last_login_ts__extract_day', + -- 'user__last_login_ts__extract_dow', + -- 'user__last_login_ts__extract_doy', + -- 'user__archived_at__hour', + -- 'user__archived_at__day', + -- 'user__archived_at__week', + -- 'user__archived_at__month', + -- 'user__archived_at__quarter', + -- 'user__archived_at__year', + -- 'user__archived_at__extract_year', + -- 'user__archived_at__extract_quarter', + -- 'user__archived_at__extract_month', + -- 'user__archived_at__extract_day', + -- 'user__archived_at__extract_dow', + -- 'user__archived_at__extract_doy', + -- 'metric_time__day', + -- 'metric_time__week', + -- 'metric_time__month', + -- 'metric_time__quarter', + -- 'metric_time__year', + -- 'metric_time__extract_year', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_month', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'user', + -- ] + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.created_at__day + , subq_5.created_at__week + , subq_5.created_at__month + , subq_5.created_at__quarter + , subq_5.created_at__year + , subq_5.created_at__extract_year + , subq_5.created_at__extract_quarter + , subq_5.created_at__extract_month + , subq_5.created_at__extract_day + , subq_5.created_at__extract_dow + , subq_5.created_at__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.last_profile_edit_ts__millisecond + , subq_5.last_profile_edit_ts__second + , subq_5.last_profile_edit_ts__minute + , subq_5.last_profile_edit_ts__hour + , subq_5.last_profile_edit_ts__day + , subq_5.last_profile_edit_ts__week + , subq_5.last_profile_edit_ts__month + , subq_5.last_profile_edit_ts__quarter + , subq_5.last_profile_edit_ts__year + , subq_5.last_profile_edit_ts__extract_year + , subq_5.last_profile_edit_ts__extract_quarter + , subq_5.last_profile_edit_ts__extract_month + , subq_5.last_profile_edit_ts__extract_day + , subq_5.last_profile_edit_ts__extract_dow + , subq_5.last_profile_edit_ts__extract_doy + , subq_5.bio_added_ts__second + , subq_5.bio_added_ts__minute + , subq_5.bio_added_ts__hour + , subq_5.bio_added_ts__day + , subq_5.bio_added_ts__week + , subq_5.bio_added_ts__month + , subq_5.bio_added_ts__quarter + , subq_5.bio_added_ts__year + , subq_5.bio_added_ts__extract_year + , subq_5.bio_added_ts__extract_quarter + , subq_5.bio_added_ts__extract_month + , subq_5.bio_added_ts__extract_day + , subq_5.bio_added_ts__extract_dow + , subq_5.bio_added_ts__extract_doy + , subq_5.last_login_ts__minute + , subq_5.last_login_ts__hour + , subq_5.last_login_ts__day + , subq_5.last_login_ts__week + , subq_5.last_login_ts__month + , subq_5.last_login_ts__quarter + , subq_5.last_login_ts__year + , subq_5.last_login_ts__extract_year + , subq_5.last_login_ts__extract_quarter + , subq_5.last_login_ts__extract_month + , subq_5.last_login_ts__extract_day + , subq_5.last_login_ts__extract_dow + , subq_5.last_login_ts__extract_doy + , subq_5.archived_at__hour + , subq_5.archived_at__day + , subq_5.archived_at__week + , subq_5.archived_at__month + , subq_5.archived_at__quarter + , subq_5.archived_at__year + , subq_5.archived_at__extract_year + , subq_5.archived_at__extract_quarter + , subq_5.archived_at__extract_month + , subq_5.archived_at__extract_day + , subq_5.archived_at__extract_dow + , subq_5.archived_at__extract_doy + , subq_5.user__ds__day + , subq_5.user__ds__week + , subq_5.user__ds__month + , subq_5.user__ds__quarter + , subq_5.user__ds__year + , subq_5.user__ds__extract_year + , subq_5.user__ds__extract_quarter + , subq_5.user__ds__extract_month + , subq_5.user__ds__extract_day + , subq_5.user__ds__extract_dow + , subq_5.user__ds__extract_doy + , subq_5.user__created_at__day + , subq_5.user__created_at__week + , subq_5.user__created_at__month + , subq_5.user__created_at__quarter + , subq_5.user__created_at__year + , subq_5.user__created_at__extract_year + , subq_5.user__created_at__extract_quarter + , subq_5.user__created_at__extract_month + , subq_5.user__created_at__extract_day + , subq_5.user__created_at__extract_dow + , subq_5.user__created_at__extract_doy + , subq_5.user__ds_partitioned__day + , subq_5.user__ds_partitioned__week + , subq_5.user__ds_partitioned__month + , subq_5.user__ds_partitioned__quarter + , subq_5.user__ds_partitioned__year + , subq_5.user__ds_partitioned__extract_year + , subq_5.user__ds_partitioned__extract_quarter + , subq_5.user__ds_partitioned__extract_month + , subq_5.user__ds_partitioned__extract_day + , subq_5.user__ds_partitioned__extract_dow + , subq_5.user__ds_partitioned__extract_doy + , subq_5.user__last_profile_edit_ts__millisecond + , subq_5.user__last_profile_edit_ts__second + , subq_5.user__last_profile_edit_ts__minute + , subq_5.user__last_profile_edit_ts__hour + , subq_5.user__last_profile_edit_ts__day + , subq_5.user__last_profile_edit_ts__week + , subq_5.user__last_profile_edit_ts__month + , subq_5.user__last_profile_edit_ts__quarter + , subq_5.user__last_profile_edit_ts__year + , subq_5.user__last_profile_edit_ts__extract_year + , subq_5.user__last_profile_edit_ts__extract_quarter + , subq_5.user__last_profile_edit_ts__extract_month + , subq_5.user__last_profile_edit_ts__extract_day + , subq_5.user__last_profile_edit_ts__extract_dow + , subq_5.user__last_profile_edit_ts__extract_doy + , subq_5.user__bio_added_ts__second + , subq_5.user__bio_added_ts__minute + , subq_5.user__bio_added_ts__hour + , subq_5.user__bio_added_ts__day + , subq_5.user__bio_added_ts__week + , subq_5.user__bio_added_ts__month + , subq_5.user__bio_added_ts__quarter + , subq_5.user__bio_added_ts__year + , subq_5.user__bio_added_ts__extract_year + , subq_5.user__bio_added_ts__extract_quarter + , subq_5.user__bio_added_ts__extract_month + , subq_5.user__bio_added_ts__extract_day + , subq_5.user__bio_added_ts__extract_dow + , subq_5.user__bio_added_ts__extract_doy + , subq_5.user__last_login_ts__minute + , subq_5.user__last_login_ts__hour + , subq_5.user__last_login_ts__day + , subq_5.user__last_login_ts__week + , subq_5.user__last_login_ts__month + , subq_5.user__last_login_ts__quarter + , subq_5.user__last_login_ts__year + , subq_5.user__last_login_ts__extract_year + , subq_5.user__last_login_ts__extract_quarter + , subq_5.user__last_login_ts__extract_month + , subq_5.user__last_login_ts__extract_day + , subq_5.user__last_login_ts__extract_dow + , subq_5.user__last_login_ts__extract_doy + , subq_5.user__archived_at__hour + , subq_5.user__archived_at__day + , subq_5.user__archived_at__week + , subq_5.user__archived_at__month + , subq_5.user__archived_at__quarter + , subq_5.user__archived_at__year + , subq_5.user__archived_at__extract_year + , subq_5.user__archived_at__extract_quarter + , subq_5.user__archived_at__extract_month + , subq_5.user__archived_at__extract_day + , subq_5.user__archived_at__extract_dow + , subq_5.user__archived_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.user + , subq_5.home_state + , subq_5.user__home_state + FROM ( + -- Metric Time Dimension 'created_at' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.created_at__day + , subq_4.created_at__week + , subq_4.created_at__month + , subq_4.created_at__quarter + , subq_4.created_at__year + , subq_4.created_at__extract_year + , subq_4.created_at__extract_quarter + , subq_4.created_at__extract_month + , subq_4.created_at__extract_day + , subq_4.created_at__extract_dow + , subq_4.created_at__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.last_profile_edit_ts__millisecond + , subq_4.last_profile_edit_ts__second + , subq_4.last_profile_edit_ts__minute + , subq_4.last_profile_edit_ts__hour + , subq_4.last_profile_edit_ts__day + , subq_4.last_profile_edit_ts__week + , subq_4.last_profile_edit_ts__month + , subq_4.last_profile_edit_ts__quarter + , subq_4.last_profile_edit_ts__year + , subq_4.last_profile_edit_ts__extract_year + , subq_4.last_profile_edit_ts__extract_quarter + , subq_4.last_profile_edit_ts__extract_month + , subq_4.last_profile_edit_ts__extract_day + , subq_4.last_profile_edit_ts__extract_dow + , subq_4.last_profile_edit_ts__extract_doy + , subq_4.bio_added_ts__second + , subq_4.bio_added_ts__minute + , subq_4.bio_added_ts__hour + , subq_4.bio_added_ts__day + , subq_4.bio_added_ts__week + , subq_4.bio_added_ts__month + , subq_4.bio_added_ts__quarter + , subq_4.bio_added_ts__year + , subq_4.bio_added_ts__extract_year + , subq_4.bio_added_ts__extract_quarter + , subq_4.bio_added_ts__extract_month + , subq_4.bio_added_ts__extract_day + , subq_4.bio_added_ts__extract_dow + , subq_4.bio_added_ts__extract_doy + , subq_4.last_login_ts__minute + , subq_4.last_login_ts__hour + , subq_4.last_login_ts__day + , subq_4.last_login_ts__week + , subq_4.last_login_ts__month + , subq_4.last_login_ts__quarter + , subq_4.last_login_ts__year + , subq_4.last_login_ts__extract_year + , subq_4.last_login_ts__extract_quarter + , subq_4.last_login_ts__extract_month + , subq_4.last_login_ts__extract_day + , subq_4.last_login_ts__extract_dow + , subq_4.last_login_ts__extract_doy + , subq_4.archived_at__hour + , subq_4.archived_at__day + , subq_4.archived_at__week + , subq_4.archived_at__month + , subq_4.archived_at__quarter + , subq_4.archived_at__year + , subq_4.archived_at__extract_year + , subq_4.archived_at__extract_quarter + , subq_4.archived_at__extract_month + , subq_4.archived_at__extract_day + , subq_4.archived_at__extract_dow + , subq_4.archived_at__extract_doy + , subq_4.user__ds__day + , subq_4.user__ds__week + , subq_4.user__ds__month + , subq_4.user__ds__quarter + , subq_4.user__ds__year + , subq_4.user__ds__extract_year + , subq_4.user__ds__extract_quarter + , subq_4.user__ds__extract_month + , subq_4.user__ds__extract_day + , subq_4.user__ds__extract_dow + , subq_4.user__ds__extract_doy + , subq_4.user__created_at__day + , subq_4.user__created_at__week + , subq_4.user__created_at__month + , subq_4.user__created_at__quarter + , subq_4.user__created_at__year + , subq_4.user__created_at__extract_year + , subq_4.user__created_at__extract_quarter + , subq_4.user__created_at__extract_month + , subq_4.user__created_at__extract_day + , subq_4.user__created_at__extract_dow + , subq_4.user__created_at__extract_doy + , subq_4.user__ds_partitioned__day + , subq_4.user__ds_partitioned__week + , subq_4.user__ds_partitioned__month + , subq_4.user__ds_partitioned__quarter + , subq_4.user__ds_partitioned__year + , subq_4.user__ds_partitioned__extract_year + , subq_4.user__ds_partitioned__extract_quarter + , subq_4.user__ds_partitioned__extract_month + , subq_4.user__ds_partitioned__extract_day + , subq_4.user__ds_partitioned__extract_dow + , subq_4.user__ds_partitioned__extract_doy + , subq_4.user__last_profile_edit_ts__millisecond + , subq_4.user__last_profile_edit_ts__second + , subq_4.user__last_profile_edit_ts__minute + , subq_4.user__last_profile_edit_ts__hour + , subq_4.user__last_profile_edit_ts__day + , subq_4.user__last_profile_edit_ts__week + , subq_4.user__last_profile_edit_ts__month + , subq_4.user__last_profile_edit_ts__quarter + , subq_4.user__last_profile_edit_ts__year + , subq_4.user__last_profile_edit_ts__extract_year + , subq_4.user__last_profile_edit_ts__extract_quarter + , subq_4.user__last_profile_edit_ts__extract_month + , subq_4.user__last_profile_edit_ts__extract_day + , subq_4.user__last_profile_edit_ts__extract_dow + , subq_4.user__last_profile_edit_ts__extract_doy + , subq_4.user__bio_added_ts__second + , subq_4.user__bio_added_ts__minute + , subq_4.user__bio_added_ts__hour + , subq_4.user__bio_added_ts__day + , subq_4.user__bio_added_ts__week + , subq_4.user__bio_added_ts__month + , subq_4.user__bio_added_ts__quarter + , subq_4.user__bio_added_ts__year + , subq_4.user__bio_added_ts__extract_year + , subq_4.user__bio_added_ts__extract_quarter + , subq_4.user__bio_added_ts__extract_month + , subq_4.user__bio_added_ts__extract_day + , subq_4.user__bio_added_ts__extract_dow + , subq_4.user__bio_added_ts__extract_doy + , subq_4.user__last_login_ts__minute + , subq_4.user__last_login_ts__hour + , subq_4.user__last_login_ts__day + , subq_4.user__last_login_ts__week + , subq_4.user__last_login_ts__month + , subq_4.user__last_login_ts__quarter + , subq_4.user__last_login_ts__year + , subq_4.user__last_login_ts__extract_year + , subq_4.user__last_login_ts__extract_quarter + , subq_4.user__last_login_ts__extract_month + , subq_4.user__last_login_ts__extract_day + , subq_4.user__last_login_ts__extract_dow + , subq_4.user__last_login_ts__extract_doy + , subq_4.user__archived_at__hour + , subq_4.user__archived_at__day + , subq_4.user__archived_at__week + , subq_4.user__archived_at__month + , subq_4.user__archived_at__quarter + , subq_4.user__archived_at__year + , subq_4.user__archived_at__extract_year + , subq_4.user__archived_at__extract_quarter + , subq_4.user__archived_at__extract_month + , subq_4.user__archived_at__extract_day + , subq_4.user__archived_at__extract_dow + , subq_4.user__archived_at__extract_doy + , subq_4.created_at__day AS metric_time__day + , subq_4.created_at__week AS metric_time__week + , subq_4.created_at__month AS metric_time__month + , subq_4.created_at__quarter AS metric_time__quarter + , subq_4.created_at__year AS metric_time__year + , subq_4.created_at__extract_year AS metric_time__extract_year + , subq_4.created_at__extract_quarter AS metric_time__extract_quarter + , subq_4.created_at__extract_month AS metric_time__extract_month + , subq_4.created_at__extract_day AS metric_time__extract_day + , subq_4.created_at__extract_dow AS metric_time__extract_dow + , subq_4.created_at__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.home_state + , subq_4.user__home_state + , subq_4.new_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_3.user = subq_6.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + ( + subq_1.listing = subq_8.listing + ) AND ( + subq_1.ds_partitioned__day = subq_8.user__ds_partitioned__day + ) + LEFT OUTER JOIN + ***************************.mf_time_spine subq_9 + ON + subq_8.user__ds__day = subq_9.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.listing__user__ds__martian_day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..70c494e2d7 --- /dev/null +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql @@ -0,0 +1,52 @@ +test_name: test_simple_metric_with_multi_hop_custom_granularity +test_filename: test_custom_granularity.py +docstring: + Test simple metric with a multi hop dimension and custom grain. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Join to Custom Granularity Dataset +-- Pass Only Elements: ['bookings', 'listing__user__ds__martian_day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_22.martian_day AS listing__user__ds__martian_day + , SUM(subq_14.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +LEFT OUTER JOIN +( + -- Join Standard Outputs + -- Pass Only Elements: ['user__ds_partitioned__day', 'user__ds__day', 'listing'] + SELECT + DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , listings_latest_src_28000.listing_id AS listing + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.dim_users users_ds_source_src_28000 + ON + listings_latest_src_28000.user_id = users_ds_source_src_28000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +ON + ( + subq_14.listing = subq_21.listing + ) AND ( + subq_14.ds_partitioned__day = subq_21.user__ds_partitioned__day + ) +LEFT OUTER JOIN + ***************************.mf_time_spine subq_22 +ON + subq_21.user__ds__day = subq_22.ds +GROUP BY + subq_22.martian_day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql new file mode 100644 index 0000000000..c3ec8b92a9 --- /dev/null +++ b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql @@ -0,0 +1,17 @@ +test_name: test_build_metric_tasks +test_filename: test_data_warehouse_tasks.py +sql_engine: Clickhouse +--- +SELECT + metric_time__day + , SUM(count_dogs) AS count_dogs +FROM ( + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS count_dogs + FROM ***************************.fct_animals animals_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql new file mode 100644 index 0000000000..27876c1e89 --- /dev/null +++ b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql @@ -0,0 +1,35 @@ +test_name: test_build_saved_query_tasks +test_filename: test_data_warehouse_tasks.py +sql_engine: Clickhouse +--- +SELECT + metric_time__day + , listing__capacity_latest + , SUM(bookings) AS bookings + , SUM(instant_bookings) AS instant_bookings +FROM ( + SELECT + listings_latest_src_10000.capacity AS listing__capacity_latest + , subq_1.metric_time__day AS metric_time__day + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + FROM ( + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_10000 + ON + subq_1.listing = listings_latest_src_10000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +WHERE listing__capacity_latest > 3 +GROUP BY + metric_time__day + , listing__capacity_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql new file mode 100644 index 0000000000..df90ad0554 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql @@ -0,0 +1,240 @@ +test_name: test_combine_output_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests combining AggregateMeasuresNode. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_2.is_instant, subq_5.is_instant) AS is_instant + , MAX(subq_2.bookings) AS bookings + , COALESCE(MAX(subq_5.instant_bookings), 1) AS instant_bookings + , COALESCE(MAX(subq_5.bookers), 1) AS bookers +FROM ( + -- Aggregate Measures + SELECT + subq_1.is_instant + , SUM(subq_1.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'is_instant'] + SELECT + subq_0.is_instant + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +FULL OUTER JOIN +( + -- Aggregate Measures + SELECT + subq_4.is_instant + , SUM(subq_4.instant_bookings) AS instant_bookings + , COUNT(DISTINCT subq_4.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['instant_bookings', 'bookers', 'is_instant'] + SELECT + subq_3.is_instant + , subq_3.instant_bookings + , subq_3.bookers + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +ON + subq_2.is_instant = subq_5.is_instant +GROUP BY + COALESCE(subq_2.is_instant, subq_5.is_instant) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql new file mode 100644 index 0000000000..04151bb604 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql @@ -0,0 +1,54 @@ +test_name: test_combine_output_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests combining AggregateMeasuresNode. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +WITH rss_28001_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , guest_id AS bookers + , is_instant + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(subq_8.is_instant, subq_11.is_instant) AS is_instant + , MAX(subq_8.bookings) AS bookings + , COALESCE(MAX(subq_11.instant_bookings), 1) AS instant_bookings + , COALESCE(MAX(subq_11.bookers), 1) AS bookers +FROM ( + -- Read From CTE For node_id=rss_28001 + -- Pass Only Elements: ['bookings', 'is_instant'] + -- Aggregate Measures + SELECT + is_instant + , SUM(bookings) AS bookings + FROM rss_28001_cte rss_28001_cte + GROUP BY + is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +FULL OUTER JOIN +( + -- Read From CTE For node_id=rss_28001 + -- Pass Only Elements: ['instant_bookings', 'bookers', 'is_instant'] + -- Aggregate Measures + SELECT + is_instant + , SUM(instant_bookings) AS instant_bookings + , COUNT(DISTINCT bookers) AS bookers + FROM rss_28001_cte rss_28001_cte + GROUP BY + is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + subq_8.is_instant = subq_11.is_instant +GROUP BY + COALESCE(subq_8.is_instant, subq_11.is_instant) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql new file mode 100644 index 0000000000..8ac4c6194e --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql @@ -0,0 +1,204 @@ +test_name: test_compute_metrics_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf compute metrics node. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.listing + , subq_5.listing__country_latest + , subq_5.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , subq_4.listing__country_latest + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_3.country_latest AS listing__country_latest + , subq_1.listing AS listing + , subq_1.bookings AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_0.listing + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_2.listing + , subq_2.country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.listing = subq_3.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + , subq_4.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql new file mode 100644 index 0000000000..c3ac5f49e8 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql @@ -0,0 +1,30 @@ +test_name: test_compute_metrics_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf compute metrics node. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_7.listing AS listing + , listings_latest_src_28000.country AS listing__country_latest + , SUM(subq_7.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 +ON + subq_7.listing = listings_latest_src_28000.listing_id +GROUP BY + subq_7.listing + , listings_latest_src_28000.country +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql new file mode 100644 index 0000000000..caf033d932 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql @@ -0,0 +1,860 @@ +test_name: test_compute_metrics_node_ratio_from_multiple_semantic_models +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the combine metrics node for ratio type metrics. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.ds__day + , subq_18.listing__country_latest + , CAST(subq_18.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.views, 0) AS DOUBLE PRECISION) AS bookings_per_view +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.ds__day, subq_17.ds__day) AS ds__day + , COALESCE(subq_8.listing__country_latest, subq_17.listing__country_latest) AS listing__country_latest + , MAX(subq_8.bookings) AS bookings + , MAX(subq_17.views) AS views + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.ds__day + , subq_7.listing__country_latest + , subq_7.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.ds__day + , subq_6.listing__country_latest + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'ds__day'] + SELECT + subq_5.ds__day + , subq_5.listing__country_latest + , subq_5.bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.ds__day + , subq_6.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_16.ds__day + , subq_16.listing__country_latest + , subq_16.views + FROM ( + -- Aggregate Measures + SELECT + subq_15.ds__day + , subq_15.listing__country_latest + , SUM(subq_15.views) AS views + FROM ( + -- Pass Only Elements: ['views', 'listing__country_latest', 'ds__day'] + SELECT + subq_14.ds__day + , subq_14.listing__country_latest + , subq_14.views + FROM ( + -- Join Standard Outputs + SELECT + subq_13.country_latest AS listing__country_latest + , subq_10.ds__day AS ds__day + , subq_10.ds__week AS ds__week + , subq_10.ds__month AS ds__month + , subq_10.ds__quarter AS ds__quarter + , subq_10.ds__year AS ds__year + , subq_10.ds__extract_year AS ds__extract_year + , subq_10.ds__extract_quarter AS ds__extract_quarter + , subq_10.ds__extract_month AS ds__extract_month + , subq_10.ds__extract_day AS ds__extract_day + , subq_10.ds__extract_dow AS ds__extract_dow + , subq_10.ds__extract_doy AS ds__extract_doy + , subq_10.ds_partitioned__day AS ds_partitioned__day + , subq_10.ds_partitioned__week AS ds_partitioned__week + , subq_10.ds_partitioned__month AS ds_partitioned__month + , subq_10.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_10.ds_partitioned__year AS ds_partitioned__year + , subq_10.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_10.view__ds__day AS view__ds__day + , subq_10.view__ds__week AS view__ds__week + , subq_10.view__ds__month AS view__ds__month + , subq_10.view__ds__quarter AS view__ds__quarter + , subq_10.view__ds__year AS view__ds__year + , subq_10.view__ds__extract_year AS view__ds__extract_year + , subq_10.view__ds__extract_quarter AS view__ds__extract_quarter + , subq_10.view__ds__extract_month AS view__ds__extract_month + , subq_10.view__ds__extract_day AS view__ds__extract_day + , subq_10.view__ds__extract_dow AS view__ds__extract_dow + , subq_10.view__ds__extract_doy AS view__ds__extract_doy + , subq_10.view__ds_partitioned__day AS view__ds_partitioned__day + , subq_10.view__ds_partitioned__week AS view__ds_partitioned__week + , subq_10.view__ds_partitioned__month AS view__ds_partitioned__month + , subq_10.view__ds_partitioned__quarter AS view__ds_partitioned__quarter + , subq_10.view__ds_partitioned__year AS view__ds_partitioned__year + , subq_10.view__ds_partitioned__extract_year AS view__ds_partitioned__extract_year + , subq_10.view__ds_partitioned__extract_quarter AS view__ds_partitioned__extract_quarter + , subq_10.view__ds_partitioned__extract_month AS view__ds_partitioned__extract_month + , subq_10.view__ds_partitioned__extract_day AS view__ds_partitioned__extract_day + , subq_10.view__ds_partitioned__extract_dow AS view__ds_partitioned__extract_dow + , subq_10.view__ds_partitioned__extract_doy AS view__ds_partitioned__extract_doy + , subq_10.metric_time__day AS metric_time__day + , subq_10.metric_time__week AS metric_time__week + , subq_10.metric_time__month AS metric_time__month + , subq_10.metric_time__quarter AS metric_time__quarter + , subq_10.metric_time__year AS metric_time__year + , subq_10.metric_time__extract_year AS metric_time__extract_year + , subq_10.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_10.metric_time__extract_month AS metric_time__extract_month + , subq_10.metric_time__extract_day AS metric_time__extract_day + , subq_10.metric_time__extract_dow AS metric_time__extract_dow + , subq_10.metric_time__extract_doy AS metric_time__extract_doy + , subq_10.listing AS listing + , subq_10.user AS user + , subq_10.view__listing AS view__listing + , subq_10.view__user AS view__user + , subq_10.views AS views + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.view__ds__day + , subq_9.view__ds__week + , subq_9.view__ds__month + , subq_9.view__ds__quarter + , subq_9.view__ds__year + , subq_9.view__ds__extract_year + , subq_9.view__ds__extract_quarter + , subq_9.view__ds__extract_month + , subq_9.view__ds__extract_day + , subq_9.view__ds__extract_dow + , subq_9.view__ds__extract_doy + , subq_9.view__ds_partitioned__day + , subq_9.view__ds_partitioned__week + , subq_9.view__ds_partitioned__month + , subq_9.view__ds_partitioned__quarter + , subq_9.view__ds_partitioned__year + , subq_9.view__ds_partitioned__extract_year + , subq_9.view__ds_partitioned__extract_quarter + , subq_9.view__ds_partitioned__extract_month + , subq_9.view__ds_partitioned__extract_day + , subq_9.view__ds_partitioned__extract_dow + , subq_9.view__ds_partitioned__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.user + , subq_9.view__listing + , subq_9.view__user + , subq_9.views + FROM ( + -- Read Elements From Semantic Model 'views_source' + SELECT + 1 AS views + , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , views_source_src_28000.listing_id AS listing + , views_source_src_28000.user_id AS user + , views_source_src_28000.listing_id AS view__listing + , views_source_src_28000.user_id AS view__user + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_12.listing + , subq_12.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.created_at__day + , subq_11.created_at__week + , subq_11.created_at__month + , subq_11.created_at__quarter + , subq_11.created_at__year + , subq_11.created_at__extract_year + , subq_11.created_at__extract_quarter + , subq_11.created_at__extract_month + , subq_11.created_at__extract_day + , subq_11.created_at__extract_dow + , subq_11.created_at__extract_doy + , subq_11.listing__ds__day + , subq_11.listing__ds__week + , subq_11.listing__ds__month + , subq_11.listing__ds__quarter + , subq_11.listing__ds__year + , subq_11.listing__ds__extract_year + , subq_11.listing__ds__extract_quarter + , subq_11.listing__ds__extract_month + , subq_11.listing__ds__extract_day + , subq_11.listing__ds__extract_dow + , subq_11.listing__ds__extract_doy + , subq_11.listing__created_at__day + , subq_11.listing__created_at__week + , subq_11.listing__created_at__month + , subq_11.listing__created_at__quarter + , subq_11.listing__created_at__year + , subq_11.listing__created_at__extract_year + , subq_11.listing__created_at__extract_quarter + , subq_11.listing__created_at__extract_month + , subq_11.listing__created_at__extract_day + , subq_11.listing__created_at__extract_dow + , subq_11.listing__created_at__extract_doy + , subq_11.ds__day AS metric_time__day + , subq_11.ds__week AS metric_time__week + , subq_11.ds__month AS metric_time__month + , subq_11.ds__quarter AS metric_time__quarter + , subq_11.ds__year AS metric_time__year + , subq_11.ds__extract_year AS metric_time__extract_year + , subq_11.ds__extract_quarter AS metric_time__extract_quarter + , subq_11.ds__extract_month AS metric_time__extract_month + , subq_11.ds__extract_day AS metric_time__extract_day + , subq_11.ds__extract_dow AS metric_time__extract_dow + , subq_11.ds__extract_doy AS metric_time__extract_doy + , subq_11.listing + , subq_11.user + , subq_11.listing__user + , subq_11.country_latest + , subq_11.is_lux_latest + , subq_11.capacity_latest + , subq_11.listing__country_latest + , subq_11.listing__is_lux_latest + , subq_11.listing__capacity_latest + , subq_11.listings + , subq_11.largest_listing + , subq_11.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_10.listing = subq_13.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + GROUP BY + subq_15.ds__day + , subq_15.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + ( + subq_8.listing__country_latest = subq_17.listing__country_latest + ) AND ( + subq_8.ds__day = subq_17.ds__day + ) + GROUP BY + COALESCE(subq_8.ds__day, subq_17.ds__day) + , COALESCE(subq_8.listing__country_latest, subq_17.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql new file mode 100644 index 0000000000..ef94e05959 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql @@ -0,0 +1,97 @@ +test_name: test_compute_metrics_node_ratio_from_multiple_semantic_models +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the combine metrics node for ratio type metrics. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28014_cte AS ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , country AS country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + ds__day AS ds__day + , listing__country_latest AS listing__country_latest + , CAST(bookings AS DOUBLE PRECISION) / CAST(NULLIF(views, 0) AS DOUBLE PRECISION) AS bookings_per_view +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_27.ds__day, subq_35.ds__day) AS ds__day + , COALESCE(subq_27.listing__country_latest, subq_35.listing__country_latest) AS listing__country_latest + , MAX(subq_27.bookings) AS bookings + , MAX(subq_35.views) AS views + FROM ( + -- Join Standard Outputs + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_20.ds__day AS ds__day + , sma_28014_cte.country_latest AS listing__country_latest + , SUM(subq_20.bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS ds__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + subq_20.listing = sma_28014_cte.listing + GROUP BY + subq_20.ds__day + , sma_28014_cte.country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + FULL OUTER JOIN + ( + -- Join Standard Outputs + -- Pass Only Elements: ['views', 'listing__country_latest', 'ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_29.ds__day AS ds__day + , sma_28014_cte.country_latest AS listing__country_latest + , SUM(subq_29.views) AS views + FROM ( + -- Read Elements From Semantic Model 'views_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS ds__day + , listing_id AS listing + , 1 AS views + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_29 + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + subq_29.listing = sma_28014_cte.listing + GROUP BY + subq_29.ds__day + , sma_28014_cte.country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + ( + subq_27.listing__country_latest = subq_35.listing__country_latest + ) AND ( + subq_27.ds__day = subq_35.ds__day + ) + GROUP BY + COALESCE(subq_27.ds__day, subq_35.ds__day) + , COALESCE(subq_27.listing__country_latest, subq_35.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql new file mode 100644 index 0000000000..790db303f3 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql @@ -0,0 +1,207 @@ +test_name: test_compute_metrics_node_ratio_from_single_semantic_model +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the compute metrics node for ratio type metrics sourced from a single semantic model. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.listing + , subq_5.listing__country_latest + , CAST(subq_5.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_5.bookers, 0) AS DOUBLE PRECISION) AS bookings_per_booker +FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , subq_4.listing__country_latest + , SUM(subq_4.bookings) AS bookings + , COUNT(DISTINCT subq_4.bookers) AS bookers + FROM ( + -- Join Standard Outputs + SELECT + subq_3.country_latest AS listing__country_latest + , subq_1.listing AS listing + , subq_1.bookings AS bookings + , subq_1.bookers AS bookers + FROM ( + -- Pass Only Elements: ['bookings', 'bookers', 'listing'] + SELECT + subq_0.listing + , subq_0.bookings + , subq_0.bookers + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_2.listing + , subq_2.country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.listing = subq_3.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + , subq_4.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql new file mode 100644 index 0000000000..f78b45dcb6 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql @@ -0,0 +1,39 @@ +test_name: test_compute_metrics_node_ratio_from_single_semantic_model +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the compute metrics node for ratio type metrics sourced from a single semantic model. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + listing + , listing__country_latest + , CAST(bookings AS DOUBLE PRECISION) / CAST(NULLIF(bookers, 0) AS DOUBLE PRECISION) AS bookings_per_booker +FROM ( + -- Join Standard Outputs + -- Aggregate Measures + SELECT + subq_7.listing AS listing + , listings_latest_src_28000.country AS listing__country_latest + , SUM(subq_7.bookings) AS bookings + , COUNT(DISTINCT subq_7.bookers) AS bookers + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'bookers', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_7.listing = listings_latest_src_28000.listing_id + GROUP BY + subq_7.listing + , listings_latest_src_28000.country + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql new file mode 100644 index 0000000000..0cf3a5b176 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql @@ -0,0 +1,204 @@ +test_name: test_compute_metrics_node_simple_expr +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the compute metrics node for expr type metrics sourced from a single measure. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.listing + , subq_5.listing__country_latest + , booking_value * 0.05 AS booking_fees +FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , subq_4.listing__country_latest + , SUM(subq_4.booking_value) AS booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.country_latest AS listing__country_latest + , subq_1.listing AS listing + , subq_1.booking_value AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'listing'] + SELECT + subq_0.listing + , subq_0.booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_2.listing + , subq_2.country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.listing = subq_3.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + , subq_4.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql new file mode 100644 index 0000000000..3b8f562e59 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql @@ -0,0 +1,29 @@ +test_name: test_compute_metrics_node_simple_expr +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests the compute metrics node for expr type metrics sourced from a single measure. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + listing + , listing__country_latest + , booking_value * 0.05 AS booking_fees +FROM ( + -- Join Standard Outputs + -- Aggregate Measures + SELECT + bookings_source_src_28000.listing_id AS listing + , listings_latest_src_28000.country AS listing__country_latest + , SUM(bookings_source_src_28000.booking_value) AS booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + bookings_source_src_28000.listing_id = listings_latest_src_28000.listing_id + GROUP BY + bookings_source_src_28000.listing_id + , listings_latest_src_28000.country + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql new file mode 100644 index 0000000000..f472229759 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql @@ -0,0 +1,122 @@ +test_name: test_constrain_time_range_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting the ConstrainTimeRangeNode to SQL. +sql_engine: Clickhouse +--- +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] +SELECT + subq_2.ds__day + , subq_2.metric_time__day + , subq_2.bookings +FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_1.ds__day + , subq_1.ds__day AS metric_time__day + , subq_1.bookings + FROM ( + -- Pass Only Elements: ['bookings', 'ds__day'] + SELECT + subq_0.ds__day + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +WHERE subq_2.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql new file mode 100644 index 0000000000..18cc99f5dd --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql @@ -0,0 +1,17 @@ +test_name: test_constrain_time_range_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting the ConstrainTimeRangeNode to SQL. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Pass Only Elements: ['bookings', 'ds__day'] +-- Metric Time Dimension 'ds' +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] +SELECT + DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings +FROM ***************************.fct_bookings bookings_source_src_28000 +WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql new file mode 100644 index 0000000000..a7a855632d --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql @@ -0,0 +1,240 @@ +test_name: test_dimension_with_joined_where_constraint +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest',] +SELECT + subq_4.user__home_state_latest +FROM ( + -- Constrain Output with WHERE + SELECT + subq_3.ds__day + , subq_3.ds__week + , subq_3.ds__month + , subq_3.ds__quarter + , subq_3.ds__year + , subq_3.ds__extract_year + , subq_3.ds__extract_quarter + , subq_3.ds__extract_month + , subq_3.ds__extract_day + , subq_3.ds__extract_dow + , subq_3.ds__extract_doy + , subq_3.created_at__day + , subq_3.created_at__week + , subq_3.created_at__month + , subq_3.created_at__quarter + , subq_3.created_at__year + , subq_3.created_at__extract_year + , subq_3.created_at__extract_quarter + , subq_3.created_at__extract_month + , subq_3.created_at__extract_day + , subq_3.created_at__extract_dow + , subq_3.created_at__extract_doy + , subq_3.listing__ds__day + , subq_3.listing__ds__week + , subq_3.listing__ds__month + , subq_3.listing__ds__quarter + , subq_3.listing__ds__year + , subq_3.listing__ds__extract_year + , subq_3.listing__ds__extract_quarter + , subq_3.listing__ds__extract_month + , subq_3.listing__ds__extract_day + , subq_3.listing__ds__extract_dow + , subq_3.listing__ds__extract_doy + , subq_3.listing__created_at__day + , subq_3.listing__created_at__week + , subq_3.listing__created_at__month + , subq_3.listing__created_at__quarter + , subq_3.listing__created_at__year + , subq_3.listing__created_at__extract_year + , subq_3.listing__created_at__extract_quarter + , subq_3.listing__created_at__extract_month + , subq_3.listing__created_at__extract_day + , subq_3.listing__created_at__extract_dow + , subq_3.listing__created_at__extract_doy + , subq_3.listing + , subq_3.user + , subq_3.listing__user + , subq_3.country_latest + , subq_3.is_lux_latest + , subq_3.capacity_latest + , subq_3.listing__country_latest + , subq_3.listing__is_lux_latest + , subq_3.listing__capacity_latest + , subq_3.user__home_state_latest + , subq_3.listings + , subq_3.largest_listing + , subq_3.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_2.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_1.user + , subq_1.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + ON + subq_0.user = subq_2.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + WHERE listing__country_latest = 'us' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +GROUP BY + subq_4.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..fd29d93ed4 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql @@ -0,0 +1,26 @@ +test_name: test_dimension_with_joined_where_constraint +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['user__home_state_latest',] +SELECT + user__home_state_latest +FROM ( + -- Join Standard Outputs + SELECT + users_latest_src_28000.home_state_latest AS user__home_state_latest + , listings_latest_src_28000.country AS listing__country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 + ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +WHERE listing__country_latest = 'us' +GROUP BY + user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql new file mode 100644 index 0000000000..0edfb47f6f --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql @@ -0,0 +1,179 @@ +test_name: test_dimensions_requiring_join +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + subq_3.listing__is_lux_latest + , subq_3.user__home_state_latest +FROM ( + -- Join Standard Outputs + SELECT + subq_2.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_1.user + , subq_1.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + ON + subq_0.user = subq_2.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +GROUP BY + subq_3.listing__is_lux_latest + , subq_3.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql new file mode 100644 index 0000000000..fc47124a24 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql @@ -0,0 +1,20 @@ +test_name: test_dimensions_requiring_join +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , users_latest_src_28000.home_state_latest AS user__home_state_latest +FROM ***************************.dim_listings_latest listings_latest_src_28000 +FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 +ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id +GROUP BY + listings_latest_src_28000.is_lux + , users_latest_src_28000.home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql new file mode 100644 index 0000000000..bdad4dbec4 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql @@ -0,0 +1,104 @@ +test_name: test_filter_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf pass filter node. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['bookings',] +SELECT + subq_0.bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql new file mode 100644 index 0000000000..55ceca4f09 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql @@ -0,0 +1,12 @@ +test_name: test_filter_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf pass filter node. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Pass Only Elements: ['bookings',] +SELECT + 1 AS bookings +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql new file mode 100644 index 0000000000..215fbd439e --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql @@ -0,0 +1,113 @@ +test_name: test_filter_with_where_constraint_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf pass filter node. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +SELECT + subq_1.ds__day + , subq_1.bookings +FROM ( + -- Pass Only Elements: ['bookings', 'ds__day'] + SELECT + subq_0.ds__day + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +WHERE booking__ds__day = '2020-01-01' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql new file mode 100644 index 0000000000..45deb5c7ce --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_filter_with_where_constraint_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf pass filter node. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +SELECT + ds__day + , bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'ds__day'] + SELECT + DATE_TRUNC('day', ds) AS ds__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +WHERE booking__ds__day = '2020-01-01' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql new file mode 100644 index 0000000000..8b4be059a6 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql @@ -0,0 +1,118 @@ +test_name: test_measure_aggregation_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf measure aggregation node. + + Covers SUM, AVERAGE, SUM_BOOLEAN (transformed to SUM upstream), and COUNT_DISTINCT agg types +sql_engine: Clickhouse +--- +-- Aggregate Measures +SELECT + SUM(subq_1.bookings) AS bookings + , SUM(subq_1.instant_bookings) AS instant_bookings + , COUNT(DISTINCT subq_1.bookers) AS bookers + , AVG(subq_1.average_booking_value) AS average_booking_value +FROM ( + -- Pass Only Elements: ['bookings', 'instant_bookings', 'average_booking_value', 'bookers'] + SELECT + subq_0.bookings + , subq_0.instant_bookings + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql new file mode 100644 index 0000000000..b52a8511ae --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql @@ -0,0 +1,18 @@ +test_name: test_measure_aggregation_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf measure aggregation node. + + Covers SUM, AVERAGE, SUM_BOOLEAN (transformed to SUM upstream), and COUNT_DISTINCT agg types +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Pass Only Elements: ['bookings', 'instant_bookings', 'average_booking_value', 'bookers'] +-- Aggregate Measures +SELECT + SUM(1) AS bookings + , SUM(CASE WHEN is_instant THEN 1 ELSE 0 END) AS instant_bookings + , COUNT(DISTINCT guest_id) AS bookers + , AVG(booking_value) AS average_booking_value +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql new file mode 100644 index 0000000000..59284fdf61 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql @@ -0,0 +1,258 @@ +test_name: test_multi_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +SELECT + subq_3.country_latest AS listing__country_latest + , subq_5.country_latest AS listing__country_latest + , subq_1.listing AS listing + , subq_1.bookings AS bookings +FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_0.listing + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +LEFT OUTER JOIN +( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_2.listing + , subq_2.country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +ON + subq_1.listing = subq_3.listing +LEFT OUTER JOIN +( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_4.listing + , subq_4.country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +ON + subq_1.listing = subq_5.listing +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql new file mode 100644 index 0000000000..cc4f15d079 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql @@ -0,0 +1,54 @@ +test_name: test_multi_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +WITH pfe_1_cte AS ( + -- Read Elements From Semantic Model 'listings_latest' + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + listing_id AS listing + , country AS country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + subq_9.country_latest AS listing__country_latest + , subq_10.country_latest AS listing__country_latest + , subq_7.listing AS listing + , subq_7.bookings AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +LEFT OUTER JOIN +( + -- Read From CTE For node_id=pfe_1 + SELECT + listing + , country_latest + FROM pfe_1_cte pfe_1_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +ON + subq_7.listing = subq_9.listing +LEFT OUTER JOIN +( + -- Read From CTE For node_id=pfe_1 + SELECT + listing + , country_latest + FROM pfe_1_cte pfe_1_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +ON + subq_7.listing = subq_10.listing +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql new file mode 100644 index 0000000000..12da6834e4 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql @@ -0,0 +1,134 @@ +test_name: test_order_by_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf compute metrics node. +sql_engine: Clickhouse +--- +-- Order By ['ds__day', 'bookings'] +SELECT + subq_3.ds__day + , subq_3.is_instant + , subq_3.bookings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_2.ds__day + , subq_2.is_instant + , subq_2.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_1.ds__day + , subq_1.is_instant + , SUM(subq_1.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'is_instant', 'ds__day'] + SELECT + subq_0.ds__day + , subq_0.is_instant + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.ds__day + , subq_1.is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +ORDER BY subq_3.ds__day, subq_3.bookings DESC +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql new file mode 100644 index 0000000000..bd1bf33e1b --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_order_by_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a leaf compute metrics node. +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By ['ds__day', 'bookings'] +SELECT + ds__day + , is_instant + , SUM(bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'is_instant', 'ds__day'] + SELECT + DATE_TRUNC('day', ds) AS ds__day + , is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +GROUP BY + ds__day + , is_instant +ORDER BY ds__day, bookings DESC +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql new file mode 100644 index 0000000000..361315185c --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql @@ -0,0 +1,156 @@ +test_name: test_semi_additive_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode. +sql_engine: Clickhouse +--- +-- Join on MIN(ds) and [] grouping by None +SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_month__month AS ds_month__month + , subq_0.ds_month__quarter AS ds_month__quarter + , subq_0.ds_month__year AS ds_month__year + , subq_0.ds_month__extract_year AS ds_month__extract_year + , subq_0.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_0.ds_month__extract_month AS ds_month__extract_month + , subq_0.account__ds__day AS account__ds__day + , subq_0.account__ds__week AS account__ds__week + , subq_0.account__ds__month AS account__ds__month + , subq_0.account__ds__quarter AS account__ds__quarter + , subq_0.account__ds__year AS account__ds__year + , subq_0.account__ds__extract_year AS account__ds__extract_year + , subq_0.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_0.account__ds__extract_month AS account__ds__extract_month + , subq_0.account__ds__extract_day AS account__ds__extract_day + , subq_0.account__ds__extract_dow AS account__ds__extract_dow + , subq_0.account__ds__extract_doy AS account__ds__extract_doy + , subq_0.account__ds_month__month AS account__ds_month__month + , subq_0.account__ds_month__quarter AS account__ds_month__quarter + , subq_0.account__ds_month__year AS account__ds_month__year + , subq_0.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_0.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_0.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_0.user AS user + , subq_0.account__user AS account__user + , subq_0.account_type AS account_type + , subq_0.account__account_type AS account__account_type + , subq_0.account_balance AS account_balance + , subq_0.total_account_balance_first_day AS total_account_balance_first_day + , subq_0.current_account_balance_by_user AS current_account_balance_by_user + , subq_0.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +INNER JOIN +( + -- Filter row on MIN(ds__day) + SELECT + MIN(subq_1.ds__day) AS ds__day__complete + FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +ON + subq_0.ds__day = subq_2.ds__day__complete +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql new file mode 100644 index 0000000000..73f5e75ec5 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql @@ -0,0 +1,110 @@ +test_name: test_semi_additive_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode. +sql_engine: Clickhouse +--- +-- Join on MIN(ds) and [] grouping by None +SELECT + subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.ds_month__month AS ds_month__month + , subq_3.ds_month__quarter AS ds_month__quarter + , subq_3.ds_month__year AS ds_month__year + , subq_3.ds_month__extract_year AS ds_month__extract_year + , subq_3.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_3.ds_month__extract_month AS ds_month__extract_month + , subq_3.account__ds__day AS account__ds__day + , subq_3.account__ds__week AS account__ds__week + , subq_3.account__ds__month AS account__ds__month + , subq_3.account__ds__quarter AS account__ds__quarter + , subq_3.account__ds__year AS account__ds__year + , subq_3.account__ds__extract_year AS account__ds__extract_year + , subq_3.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_3.account__ds__extract_month AS account__ds__extract_month + , subq_3.account__ds__extract_day AS account__ds__extract_day + , subq_3.account__ds__extract_dow AS account__ds__extract_dow + , subq_3.account__ds__extract_doy AS account__ds__extract_doy + , subq_3.account__ds_month__month AS account__ds_month__month + , subq_3.account__ds_month__quarter AS account__ds_month__quarter + , subq_3.account__ds_month__year AS account__ds_month__year + , subq_3.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_3.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_3.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_3.user AS user + , subq_3.account__user AS account__user + , subq_3.account_type AS account_type + , subq_3.account__account_type AS account__account_type + , subq_3.account_balance AS account_balance + , subq_3.total_account_balance_first_day AS total_account_balance_first_day + , subq_3.current_account_balance_by_user AS current_account_balance_by_user + , subq_3.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + account_balance + , account_balance AS total_account_balance_first_day + , account_balance AS current_account_balance_by_user + , account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('month', ds_month) AS ds_month__month + , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter + , DATE_TRUNC('year', ds_month) AS ds_month__year + , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , account_type + , DATE_TRUNC('day', ds) AS account__ds__day + , DATE_TRUNC('week', ds) AS account__ds__week + , DATE_TRUNC('month', ds) AS account__ds__month + , DATE_TRUNC('quarter', ds) AS account__ds__quarter + , DATE_TRUNC('year', ds) AS account__ds__year + , EXTRACT(toYear FROM ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy + , DATE_TRUNC('month', ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , account_type AS account__account_type + , user_id AS user + , user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +INNER JOIN +( + -- Read Elements From Semantic Model 'accounts_source' + -- Filter row on MIN(ds__day) + SELECT + MIN(DATE_TRUNC('day', ds)) AS ds__day__complete + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +ON + subq_3.ds__day = subq_5.ds__day__complete +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql new file mode 100644 index 0000000000..911e656000 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql @@ -0,0 +1,163 @@ +test_name: test_semi_additive_join_node_with_grouping +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode with a window_grouping. +sql_engine: Clickhouse +--- +-- Join on MAX(ds) and ['user'] grouping by None +SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_month__month AS ds_month__month + , subq_0.ds_month__quarter AS ds_month__quarter + , subq_0.ds_month__year AS ds_month__year + , subq_0.ds_month__extract_year AS ds_month__extract_year + , subq_0.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_0.ds_month__extract_month AS ds_month__extract_month + , subq_0.account__ds__day AS account__ds__day + , subq_0.account__ds__week AS account__ds__week + , subq_0.account__ds__month AS account__ds__month + , subq_0.account__ds__quarter AS account__ds__quarter + , subq_0.account__ds__year AS account__ds__year + , subq_0.account__ds__extract_year AS account__ds__extract_year + , subq_0.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_0.account__ds__extract_month AS account__ds__extract_month + , subq_0.account__ds__extract_day AS account__ds__extract_day + , subq_0.account__ds__extract_dow AS account__ds__extract_dow + , subq_0.account__ds__extract_doy AS account__ds__extract_doy + , subq_0.account__ds_month__month AS account__ds_month__month + , subq_0.account__ds_month__quarter AS account__ds_month__quarter + , subq_0.account__ds_month__year AS account__ds_month__year + , subq_0.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_0.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_0.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_0.user AS user + , subq_0.account__user AS account__user + , subq_0.account_type AS account_type + , subq_0.account__account_type AS account__account_type + , subq_0.account_balance AS account_balance + , subq_0.total_account_balance_first_day AS total_account_balance_first_day + , subq_0.current_account_balance_by_user AS current_account_balance_by_user + , subq_0.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +INNER JOIN +( + -- Filter row on MAX(ds__day) + SELECT + subq_1.user + , MAX(subq_1.ds__day) AS ds__day__complete + FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +ON + ( + subq_0.ds__day = subq_2.ds__day__complete + ) AND ( + subq_0.user = subq_2.user + ) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql new file mode 100644 index 0000000000..240479f72c --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql @@ -0,0 +1,117 @@ +test_name: test_semi_additive_join_node_with_grouping +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode with a window_grouping. +sql_engine: Clickhouse +--- +-- Join on MAX(ds) and ['user'] grouping by None +SELECT + subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.ds_month__month AS ds_month__month + , subq_3.ds_month__quarter AS ds_month__quarter + , subq_3.ds_month__year AS ds_month__year + , subq_3.ds_month__extract_year AS ds_month__extract_year + , subq_3.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_3.ds_month__extract_month AS ds_month__extract_month + , subq_3.account__ds__day AS account__ds__day + , subq_3.account__ds__week AS account__ds__week + , subq_3.account__ds__month AS account__ds__month + , subq_3.account__ds__quarter AS account__ds__quarter + , subq_3.account__ds__year AS account__ds__year + , subq_3.account__ds__extract_year AS account__ds__extract_year + , subq_3.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_3.account__ds__extract_month AS account__ds__extract_month + , subq_3.account__ds__extract_day AS account__ds__extract_day + , subq_3.account__ds__extract_dow AS account__ds__extract_dow + , subq_3.account__ds__extract_doy AS account__ds__extract_doy + , subq_3.account__ds_month__month AS account__ds_month__month + , subq_3.account__ds_month__quarter AS account__ds_month__quarter + , subq_3.account__ds_month__year AS account__ds_month__year + , subq_3.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_3.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_3.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_3.user AS user + , subq_3.account__user AS account__user + , subq_3.account_type AS account_type + , subq_3.account__account_type AS account__account_type + , subq_3.account_balance AS account_balance + , subq_3.total_account_balance_first_day AS total_account_balance_first_day + , subq_3.current_account_balance_by_user AS current_account_balance_by_user + , subq_3.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + account_balance + , account_balance AS total_account_balance_first_day + , account_balance AS current_account_balance_by_user + , account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('month', ds_month) AS ds_month__month + , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter + , DATE_TRUNC('year', ds_month) AS ds_month__year + , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , account_type + , DATE_TRUNC('day', ds) AS account__ds__day + , DATE_TRUNC('week', ds) AS account__ds__week + , DATE_TRUNC('month', ds) AS account__ds__month + , DATE_TRUNC('quarter', ds) AS account__ds__quarter + , DATE_TRUNC('year', ds) AS account__ds__year + , EXTRACT(toYear FROM ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy + , DATE_TRUNC('month', ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , account_type AS account__account_type + , user_id AS user + , user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +INNER JOIN +( + -- Read Elements From Semantic Model 'accounts_source' + -- Filter row on MAX(ds__day) + SELECT + user_id AS user + , MAX(DATE_TRUNC('day', ds)) AS ds__day__complete + FROM ***************************.fct_accounts accounts_source_src_28000 + GROUP BY + user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +ON + ( + subq_3.ds__day = subq_5.ds__day__complete + ) AND ( + subq_3.user = subq_5.user + ) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql new file mode 100644 index 0000000000..fb7fa91cf3 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql @@ -0,0 +1,159 @@ +test_name: test_semi_additive_join_node_with_queried_group_by +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode. +sql_engine: Clickhouse +--- +-- Join on MIN(ds) and [] grouping by ds +SELECT + subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.ds_month__month AS ds_month__month + , subq_0.ds_month__quarter AS ds_month__quarter + , subq_0.ds_month__year AS ds_month__year + , subq_0.ds_month__extract_year AS ds_month__extract_year + , subq_0.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_0.ds_month__extract_month AS ds_month__extract_month + , subq_0.account__ds__day AS account__ds__day + , subq_0.account__ds__week AS account__ds__week + , subq_0.account__ds__month AS account__ds__month + , subq_0.account__ds__quarter AS account__ds__quarter + , subq_0.account__ds__year AS account__ds__year + , subq_0.account__ds__extract_year AS account__ds__extract_year + , subq_0.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_0.account__ds__extract_month AS account__ds__extract_month + , subq_0.account__ds__extract_day AS account__ds__extract_day + , subq_0.account__ds__extract_dow AS account__ds__extract_dow + , subq_0.account__ds__extract_doy AS account__ds__extract_doy + , subq_0.account__ds_month__month AS account__ds_month__month + , subq_0.account__ds_month__quarter AS account__ds_month__quarter + , subq_0.account__ds_month__year AS account__ds_month__year + , subq_0.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_0.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_0.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_0.user AS user + , subq_0.account__user AS account__user + , subq_0.account_type AS account_type + , subq_0.account__account_type AS account__account_type + , subq_0.account_balance AS account_balance + , subq_0.total_account_balance_first_day AS total_account_balance_first_day + , subq_0.current_account_balance_by_user AS current_account_balance_by_user + , subq_0.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +INNER JOIN +( + -- Filter row on MIN(ds__day) + SELECT + subq_1.ds__week + , MIN(subq_1.ds__day) AS ds__day__complete + FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.ds__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +ON + subq_0.ds__day = subq_2.ds__day__complete +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..b76a4728a7 --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql @@ -0,0 +1,113 @@ +test_name: test_semi_additive_join_node_with_queried_group_by +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan using a SemiAdditiveJoinNode. +sql_engine: Clickhouse +--- +-- Join on MIN(ds) and [] grouping by ds +SELECT + subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.ds_month__month AS ds_month__month + , subq_3.ds_month__quarter AS ds_month__quarter + , subq_3.ds_month__year AS ds_month__year + , subq_3.ds_month__extract_year AS ds_month__extract_year + , subq_3.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_3.ds_month__extract_month AS ds_month__extract_month + , subq_3.account__ds__day AS account__ds__day + , subq_3.account__ds__week AS account__ds__week + , subq_3.account__ds__month AS account__ds__month + , subq_3.account__ds__quarter AS account__ds__quarter + , subq_3.account__ds__year AS account__ds__year + , subq_3.account__ds__extract_year AS account__ds__extract_year + , subq_3.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_3.account__ds__extract_month AS account__ds__extract_month + , subq_3.account__ds__extract_day AS account__ds__extract_day + , subq_3.account__ds__extract_dow AS account__ds__extract_dow + , subq_3.account__ds__extract_doy AS account__ds__extract_doy + , subq_3.account__ds_month__month AS account__ds_month__month + , subq_3.account__ds_month__quarter AS account__ds_month__quarter + , subq_3.account__ds_month__year AS account__ds_month__year + , subq_3.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_3.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_3.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_3.user AS user + , subq_3.account__user AS account__user + , subq_3.account_type AS account_type + , subq_3.account__account_type AS account__account_type + , subq_3.account_balance AS account_balance + , subq_3.total_account_balance_first_day AS total_account_balance_first_day + , subq_3.current_account_balance_by_user AS current_account_balance_by_user + , subq_3.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + account_balance + , account_balance AS total_account_balance_first_day + , account_balance AS current_account_balance_by_user + , account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('month', ds_month) AS ds_month__month + , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter + , DATE_TRUNC('year', ds_month) AS ds_month__year + , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , account_type + , DATE_TRUNC('day', ds) AS account__ds__day + , DATE_TRUNC('week', ds) AS account__ds__week + , DATE_TRUNC('month', ds) AS account__ds__month + , DATE_TRUNC('quarter', ds) AS account__ds__quarter + , DATE_TRUNC('year', ds) AS account__ds__year + , EXTRACT(toYear FROM ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy + , DATE_TRUNC('month', ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , account_type AS account__account_type + , user_id AS user + , user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +INNER JOIN +( + -- Read Elements From Semantic Model 'accounts_source' + -- Filter row on MIN(ds__day) + SELECT + DATE_TRUNC('week', ds) AS ds__week + , MIN(DATE_TRUNC('day', ds)) AS ds__day__complete + FROM ***************************.fct_accounts accounts_source_src_28000 + GROUP BY + DATE_TRUNC('week', ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +ON + subq_3.ds__day = subq_5.ds__day__complete +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql new file mode 100644 index 0000000000..891b460f8d --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql @@ -0,0 +1,184 @@ +test_name: test_single_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 1 dimension. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +SELECT + subq_1.listing AS listing + , subq_1.bookings AS bookings +FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_0.listing + , subq_0.bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +LEFT OUTER JOIN +( + -- Pass Only Elements: ['listing__country_latest', 'listing'] + SELECT + subq_2.listing + , subq_2.listing__country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +ON + subq_1.listing = subq_3.listing +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql new file mode 100644 index 0000000000..52b68c388f --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql @@ -0,0 +1,24 @@ +test_name: test_single_join_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 1 dimension. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +SELECT + subq_5.listing AS listing + , subq_5.bookings AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 +ON + subq_5.listing = listings_latest_src_28000.listing_id +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql new file mode 100644 index 0000000000..05749175be --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql @@ -0,0 +1,98 @@ +test_name: test_source_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a single source node. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql new file mode 100644 index 0000000000..ccc27f905d --- /dev/null +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql @@ -0,0 +1,98 @@ +test_name: test_source_node +test_filename: test_dataflow_to_sql_plan.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a single source node. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , booking_value + , booking_value AS max_booking_value + , booking_value AS min_booking_value + , guest_id AS bookers + , booking_value AS average_booking_value + , booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , booking_value AS median_booking_value + , booking_value AS booking_value_p99 + , booking_value AS discrete_booking_value_p99 + , booking_value AS approximate_continuous_booking_value_p99 + , booking_value AS approximate_discrete_booking_value_p99 + , is_instant + , DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS paid_at__day + , DATE_TRUNC('week', paid_at) AS paid_at__week + , DATE_TRUNC('month', paid_at) AS paid_at__month + , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter + , DATE_TRUNC('year', paid_at) AS paid_at__year + , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy + , is_instant AS booking__is_instant + , DATE_TRUNC('day', ds) AS booking__ds__day + , DATE_TRUNC('week', ds) AS booking__ds__week + , DATE_TRUNC('month', ds) AS booking__ds__month + , DATE_TRUNC('quarter', ds) AS booking__ds__quarter + , DATE_TRUNC('year', ds) AS booking__ds__year + , EXTRACT(toYear FROM ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy + , listing_id AS listing + , guest_id AS guest + , host_id AS host + , listing_id AS booking__listing + , guest_id AS booking__guest + , host_id AS booking__host +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..8b43ff776b --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql @@ -0,0 +1,591 @@ +test_name: test_cumulative_time_offset_metric_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_12.metric_time__day + , every_2_days_bookers_2_days_ago AS every_2_days_bookers_2_days_ago +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_11.metric_time__day + , subq_11.bookers AS every_2_days_bookers_2_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_10.metric_time__day + , COUNT(DISTINCT subq_10.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__day'] + SELECT + subq_9.metric_time__day + , subq_9.bookers + FROM ( + -- Constrain Time Range to [2019-12-19T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_partitioned__day + , subq_8.ds_partitioned__week + , subq_8.ds_partitioned__month + , subq_8.ds_partitioned__quarter + , subq_8.ds_partitioned__year + , subq_8.ds_partitioned__extract_year + , subq_8.ds_partitioned__extract_quarter + , subq_8.ds_partitioned__extract_month + , subq_8.ds_partitioned__extract_day + , subq_8.ds_partitioned__extract_dow + , subq_8.ds_partitioned__extract_doy + , subq_8.paid_at__day + , subq_8.paid_at__week + , subq_8.paid_at__month + , subq_8.paid_at__quarter + , subq_8.paid_at__year + , subq_8.paid_at__extract_year + , subq_8.paid_at__extract_quarter + , subq_8.paid_at__extract_month + , subq_8.paid_at__extract_day + , subq_8.paid_at__extract_dow + , subq_8.paid_at__extract_doy + , subq_8.booking__ds__day + , subq_8.booking__ds__week + , subq_8.booking__ds__month + , subq_8.booking__ds__quarter + , subq_8.booking__ds__year + , subq_8.booking__ds__extract_year + , subq_8.booking__ds__extract_quarter + , subq_8.booking__ds__extract_month + , subq_8.booking__ds__extract_day + , subq_8.booking__ds__extract_dow + , subq_8.booking__ds__extract_doy + , subq_8.booking__ds_partitioned__day + , subq_8.booking__ds_partitioned__week + , subq_8.booking__ds_partitioned__month + , subq_8.booking__ds_partitioned__quarter + , subq_8.booking__ds_partitioned__year + , subq_8.booking__ds_partitioned__extract_year + , subq_8.booking__ds_partitioned__extract_quarter + , subq_8.booking__ds_partitioned__extract_month + , subq_8.booking__ds_partitioned__extract_day + , subq_8.booking__ds_partitioned__extract_dow + , subq_8.booking__ds_partitioned__extract_doy + , subq_8.booking__paid_at__day + , subq_8.booking__paid_at__week + , subq_8.booking__paid_at__month + , subq_8.booking__paid_at__quarter + , subq_8.booking__paid_at__year + , subq_8.booking__paid_at__extract_year + , subq_8.booking__paid_at__extract_quarter + , subq_8.booking__paid_at__extract_month + , subq_8.booking__paid_at__extract_day + , subq_8.booking__paid_at__extract_dow + , subq_8.booking__paid_at__extract_doy + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.metric_time__day + , subq_8.listing + , subq_8.guest + , subq_8.host + , subq_8.booking__listing + , subq_8.booking__guest + , subq_8.booking__host + , subq_8.is_instant + , subq_8.booking__is_instant + , subq_8.bookings + , subq_8.instant_bookings + , subq_8.booking_value + , subq_8.max_booking_value + , subq_8.min_booking_value + , subq_8.bookers + , subq_8.average_booking_value + , subq_8.referred_bookings + , subq_8.median_booking_value + , subq_8.booking_value_p99 + , subq_8.discrete_booking_value_p99 + , subq_8.approximate_continuous_booking_value_p99 + , subq_8.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_4.ds__day AS ds__day + , subq_4.ds__week AS ds__week + , subq_4.ds__month AS ds__month + , subq_4.ds__quarter AS ds__quarter + , subq_4.ds__year AS ds__year + , subq_4.ds__extract_year AS ds__extract_year + , subq_4.ds__extract_quarter AS ds__extract_quarter + , subq_4.ds__extract_month AS ds__extract_month + , subq_4.ds__extract_day AS ds__extract_day + , subq_4.ds__extract_dow AS ds__extract_dow + , subq_4.ds__extract_doy AS ds__extract_doy + , subq_4.ds_partitioned__day AS ds_partitioned__day + , subq_4.ds_partitioned__week AS ds_partitioned__week + , subq_4.ds_partitioned__month AS ds_partitioned__month + , subq_4.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_4.ds_partitioned__year AS ds_partitioned__year + , subq_4.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_4.paid_at__day AS paid_at__day + , subq_4.paid_at__week AS paid_at__week + , subq_4.paid_at__month AS paid_at__month + , subq_4.paid_at__quarter AS paid_at__quarter + , subq_4.paid_at__year AS paid_at__year + , subq_4.paid_at__extract_year AS paid_at__extract_year + , subq_4.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_4.paid_at__extract_month AS paid_at__extract_month + , subq_4.paid_at__extract_day AS paid_at__extract_day + , subq_4.paid_at__extract_dow AS paid_at__extract_dow + , subq_4.paid_at__extract_doy AS paid_at__extract_doy + , subq_4.booking__ds__day AS booking__ds__day + , subq_4.booking__ds__week AS booking__ds__week + , subq_4.booking__ds__month AS booking__ds__month + , subq_4.booking__ds__quarter AS booking__ds__quarter + , subq_4.booking__ds__year AS booking__ds__year + , subq_4.booking__ds__extract_year AS booking__ds__extract_year + , subq_4.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_4.booking__ds__extract_month AS booking__ds__extract_month + , subq_4.booking__ds__extract_day AS booking__ds__extract_day + , subq_4.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_4.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day AS booking__paid_at__day + , subq_4.booking__paid_at__week AS booking__paid_at__week + , subq_4.booking__paid_at__month AS booking__paid_at__month + , subq_4.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_4.booking__paid_at__year AS booking__paid_at__year + , subq_4.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_4.metric_time__week AS metric_time__week + , subq_4.metric_time__month AS metric_time__month + , subq_4.metric_time__quarter AS metric_time__quarter + , subq_4.metric_time__year AS metric_time__year + , subq_4.metric_time__extract_year AS metric_time__extract_year + , subq_4.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_4.metric_time__extract_month AS metric_time__extract_month + , subq_4.metric_time__extract_day AS metric_time__extract_day + , subq_4.metric_time__extract_dow AS metric_time__extract_dow + , subq_4.metric_time__extract_doy AS metric_time__extract_doy + , subq_7.metric_time__day AS metric_time__day + , subq_4.listing AS listing + , subq_4.guest AS guest + , subq_4.host AS host + , subq_4.booking__listing AS booking__listing + , subq_4.booking__guest AS booking__guest + , subq_4.booking__host AS booking__host + , subq_4.is_instant AS is_instant + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + , subq_4.instant_bookings AS instant_bookings + , subq_4.booking_value AS booking_value + , subq_4.max_booking_value AS max_booking_value + , subq_4.min_booking_value AS min_booking_value + , subq_4.bookers AS bookers + , subq_4.average_booking_value AS average_booking_value + , subq_4.referred_bookings AS referred_bookings + , subq_4.median_booking_value AS median_booking_value + , subq_4.booking_value_p99 AS booking_value_p99 + , subq_4.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_4.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_4.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + INNER JOIN + ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + addDays(subq_7.metric_time__day, CAST(-2 AS Integer)) = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE subq_8.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..0f562929b3 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,37 @@ +test_name: test_cumulative_time_offset_metric_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , every_2_days_bookers_2_days_ago AS every_2_days_bookers_2_days_ago +FROM ( + -- Join to Time Spine Dataset + -- Constrain Time Range to [2019-12-19T00:00:00, 2020-01-02T00:00:00] + -- Pass Only Elements: ['bookers', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , COUNT(DISTINCT subq_17.bookers) AS every_2_days_bookers_2_days_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Join Self Over Time Range + SELECT + subq_16.ds AS metric_time__day + , bookings_source_src_28000.guest_id AS bookers + FROM ***************************.mf_time_spine subq_16 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + addDays(time_spine_src_28006.ds, CAST(-2 AS Integer)) = subq_17.metric_time__day + WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_25 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql new file mode 100644 index 0000000000..38b539c5c8 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql @@ -0,0 +1,462 @@ +test_name: test_derived_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__day + , (bookings - ref_bookings) * 1.0 / bookings AS non_referred_bookings_pct +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) AS metric_time__day + , MAX(subq_4.ref_bookings) AS ref_bookings + , MAX(subq_9.bookings) AS bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.referred_bookings AS ref_bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.referred_bookings) AS referred_bookings + FROM ( + -- Pass Only Elements: ['referred_bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.referred_bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + subq_4.metric_time__day = subq_9.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql new file mode 100644 index 0000000000..34619561ec --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql @@ -0,0 +1,31 @@ +test_name: test_derived_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , (bookings - ref_bookings) * 1.0 / bookings AS non_referred_bookings_pct +FROM ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(referred_bookings) AS ref_bookings + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['referred_bookings', 'bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql new file mode 100644 index 0000000000..0574b512ab --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql @@ -0,0 +1,480 @@ +test_name: test_derived_metric_that_defines_the_same_alias_in_different_components +test_filename: test_derived_metric_rendering.py +docstring: + Tests querying a derived metric which give the same alias to its components. +sql_engine: Clickhouse +--- +-- Order By [] Limit 1 +SELECT + subq_12.booking__is_instant + , subq_12.derived_shared_alias_1a + , subq_12.derived_shared_alias_2 +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.booking__is_instant, subq_11.booking__is_instant) AS booking__is_instant + , MAX(subq_5.derived_shared_alias_1a) AS derived_shared_alias_1a + , MAX(subq_11.derived_shared_alias_2) AS derived_shared_alias_2 + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.booking__is_instant + , shared_alias - 10 AS derived_shared_alias_1a + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.booking__is_instant + , subq_3.bookings AS shared_alias + FROM ( + -- Aggregate Measures + SELECT + subq_2.booking__is_instant + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant'] + SELECT + subq_1.booking__is_instant + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_10.booking__is_instant + , shared_alias + 10 AS derived_shared_alias_2 + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_9.booking__is_instant + , subq_9.instant_bookings AS shared_alias + FROM ( + -- Aggregate Measures + SELECT + subq_8.booking__is_instant + , SUM(subq_8.instant_bookings) AS instant_bookings + FROM ( + -- Pass Only Elements: ['instant_bookings', 'booking__is_instant'] + SELECT + subq_7.booking__is_instant + , subq_7.instant_bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds_partitioned__day + , subq_6.ds_partitioned__week + , subq_6.ds_partitioned__month + , subq_6.ds_partitioned__quarter + , subq_6.ds_partitioned__year + , subq_6.ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy + , subq_6.paid_at__day + , subq_6.paid_at__week + , subq_6.paid_at__month + , subq_6.paid_at__quarter + , subq_6.paid_at__year + , subq_6.paid_at__extract_year + , subq_6.paid_at__extract_quarter + , subq_6.paid_at__extract_month + , subq_6.paid_at__extract_day + , subq_6.paid_at__extract_dow + , subq_6.paid_at__extract_doy + , subq_6.booking__ds__day + , subq_6.booking__ds__week + , subq_6.booking__ds__month + , subq_6.booking__ds__quarter + , subq_6.booking__ds__year + , subq_6.booking__ds__extract_year + , subq_6.booking__ds__extract_quarter + , subq_6.booking__ds__extract_month + , subq_6.booking__ds__extract_day + , subq_6.booking__ds__extract_dow + , subq_6.booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day + , subq_6.booking__paid_at__week + , subq_6.booking__paid_at__month + , subq_6.booking__paid_at__quarter + , subq_6.booking__paid_at__year + , subq_6.booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.guest + , subq_6.host + , subq_6.booking__listing + , subq_6.booking__guest + , subq_6.booking__host + , subq_6.is_instant + , subq_6.booking__is_instant + , subq_6.bookings + , subq_6.instant_bookings + , subq_6.booking_value + , subq_6.max_booking_value + , subq_6.min_booking_value + , subq_6.bookers + , subq_6.average_booking_value + , subq_6.referred_bookings + , subq_6.median_booking_value + , subq_6.booking_value_p99 + , subq_6.discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_5.booking__is_instant = subq_11.booking__is_instant + GROUP BY + COALESCE(subq_5.booking__is_instant, subq_11.booking__is_instant) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +LIMIT 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql new file mode 100644 index 0000000000..639e81e4fc --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql @@ -0,0 +1,70 @@ +test_name: test_derived_metric_that_defines_the_same_alias_in_different_components +test_filename: test_derived_metric_rendering.py +docstring: + Tests querying a derived metric which give the same alias to its components. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Order By [] Limit 1 +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + is_instant AS booking__is_instant + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(subq_18.booking__is_instant, subq_23.booking__is_instant) AS booking__is_instant + , MAX(subq_18.derived_shared_alias_1a) AS derived_shared_alias_1a + , MAX(subq_23.derived_shared_alias_2) AS derived_shared_alias_2 +FROM ( + -- Compute Metrics via Expressions + SELECT + booking__is_instant + , shared_alias - 10 AS derived_shared_alias_1a + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'booking__is_instant'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + booking__is_instant + , SUM(bookings) AS shared_alias + FROM sma_28009_cte sma_28009_cte + GROUP BY + booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + booking__is_instant + , shared_alias + 10 AS derived_shared_alias_2 + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['instant_bookings', 'booking__is_instant'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + booking__is_instant + , SUM(instant_bookings) AS shared_alias + FROM sma_28009_cte sma_28009_cte + GROUP BY + booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_23 +ON + subq_18.booking__is_instant = subq_23.booking__is_instant +GROUP BY + COALESCE(subq_18.booking__is_instant, subq_23.booking__is_instant) +LIMIT 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql new file mode 100644 index 0000000000..9f259c6595 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql @@ -0,0 +1,151 @@ +test_name: test_derived_metric_with_month_dimension_and_offset_window +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__month + , bookings_last_month AS bookings_last_month +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__month + , subq_7.bookings_monthly AS bookings_last_month + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , SUM(subq_6.bookings_monthly) AS bookings_monthly + FROM ( + -- Pass Only Elements: ['bookings_monthly', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.bookings_monthly + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.booking_monthly__ds__month AS booking_monthly__ds__month + , subq_1.booking_monthly__ds__quarter AS booking_monthly__ds__quarter + , subq_1.booking_monthly__ds__year AS booking_monthly__ds__year + , subq_1.booking_monthly__ds__extract_year AS booking_monthly__ds__extract_year + , subq_1.booking_monthly__ds__extract_quarter AS booking_monthly__ds__extract_quarter + , subq_1.booking_monthly__ds__extract_month AS booking_monthly__ds__extract_month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_4.metric_time__month AS metric_time__month + , subq_1.listing AS listing + , subq_1.booking_monthly__listing AS booking_monthly__listing + , subq_1.bookings_monthly AS bookings_monthly + FROM ( + -- Pass Only Elements: ['metric_time__month',] + SELECT + subq_3.metric_time__month + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__month AS metric_time__month + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_16006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_16006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_16006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_16006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_16006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_16006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_16006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_16006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_16006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_16006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_16006.ds) AS ds__extract_doy + , time_spine_src_16006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_16006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.booking_monthly__ds__month + , subq_0.booking_monthly__ds__quarter + , subq_0.booking_monthly__ds__year + , subq_0.booking_monthly__ds__extract_year + , subq_0.booking_monthly__ds__extract_quarter + , subq_0.booking_monthly__ds__extract_month + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.listing + , subq_0.booking_monthly__listing + , subq_0.bookings_monthly + FROM ( + -- Read Elements From Semantic Model 'monthly_bookings_source' + SELECT + monthly_bookings_source_src_16000.bookings_monthly + , DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) AS ds__month + , DATE_TRUNC('quarter', monthly_bookings_source_src_16000.ds) AS ds__quarter + , DATE_TRUNC('year', monthly_bookings_source_src_16000.ds) AS ds__year + , EXTRACT(toYear FROM monthly_bookings_source_src_16000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM monthly_bookings_source_src_16000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM monthly_bookings_source_src_16000.ds) AS ds__extract_month + , DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__month + , DATE_TRUNC('quarter', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__quarter + , DATE_TRUNC('year', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__year + , EXTRACT(toYear FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_year + , EXTRACT(toQuarter FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_quarter + , EXTRACT(toMonth FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_month + , monthly_bookings_source_src_16000.listing_id AS listing + , monthly_bookings_source_src_16000.listing_id AS booking_monthly__listing + FROM ***************************.fct_bookings_extended_monthly monthly_bookings_source_src_16000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addMonths(subq_4.metric_time__month, CAST(-1 AS Integer)) = subq_1.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql new file mode 100644 index 0000000000..4b8f9f6d4c --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql @@ -0,0 +1,36 @@ +test_name: test_derived_metric_with_month_dimension_and_offset_window +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__month + , bookings_last_month AS bookings_last_month +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings_monthly', 'metric_time__month'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + subq_13.metric_time__month AS metric_time__month + , SUM(monthly_bookings_source_src_16000.bookings_monthly) AS bookings_last_month + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + -- Pass Only Elements: ['metric_time__month',] + SELECT + DATE_TRUNC('month', ds) AS metric_time__month + FROM ***************************.mf_time_spine time_spine_src_16006 + GROUP BY + DATE_TRUNC('month', ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + INNER JOIN + ***************************.fct_bookings_extended_monthly monthly_bookings_source_src_16000 + ON + addMonths(subq_13.metric_time__month, CAST(-1 AS Integer)) = DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) + GROUP BY + subq_13.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql new file mode 100644 index 0000000000..1a638e5ade --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql @@ -0,0 +1,609 @@ +test_name: test_derived_metric_with_offset_to_grain +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) AS metric_time__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__day + , subq_12.bookings AS bookings_at_start_of_month + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__day + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_10.metric_time__day + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_8.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + DATE_TRUNC('month', subq_9.metric_time__day) = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.metric_time__day = subq_13.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql new file mode 100644 index 0000000000..6b81879452 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql @@ -0,0 +1,62 @@ +test_name: test_derived_metric_with_offset_to_grain +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) AS metric_time__day + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , SUM(sma_28009_cte.bookings) AS bookings_at_start_of_month + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.metric_time__day = subq_27.metric_time__day + GROUP BY + COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql new file mode 100644 index 0000000000..58e2f6f354 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql @@ -0,0 +1,611 @@ +test_name: test_derived_metric_with_offset_to_grain_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__week + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__week, subq_13.metric_time__week) AS metric_time__week + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__week + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__week + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__week'] + SELECT + subq_1.metric_time__week + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__week + , subq_12.bookings AS bookings_at_start_of_month + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__week + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__week'] + SELECT + subq_10.metric_time__week + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_9.metric_time__week AS metric_time__week + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__week'] + SELECT + subq_8.metric_time__day + , subq_8.metric_time__week + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + DATE_TRUNC('month', subq_9.metric_time__day) = subq_6.metric_time__day + WHERE subq_9.metric_time__week = subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.metric_time__week = subq_13.metric_time__week + GROUP BY + COALESCE(subq_4.metric_time__week, subq_13.metric_time__week) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..64e1aa2131 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql @@ -0,0 +1,64 @@ +test_name: test_derived_metric_with_offset_to_grain_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('week', ds) AS metric_time__week + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__week AS metric_time__week + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.metric_time__week, subq_27.metric_time__week) AS metric_time__week + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__week'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__week + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__week'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + DATE_TRUNC('week', time_spine_src_28006.ds) AS metric_time__week + , SUM(sma_28009_cte.bookings) AS bookings_at_start_of_month + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day + WHERE DATE_TRUNC('week', time_spine_src_28006.ds) = time_spine_src_28006.ds + GROUP BY + DATE_TRUNC('week', time_spine_src_28006.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.metric_time__week = subq_27.metric_time__week + GROUP BY + COALESCE(subq_19.metric_time__week, subq_27.metric_time__week) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql new file mode 100644 index 0000000000..1e6b82e27e --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql @@ -0,0 +1,609 @@ +test_name: test_derived_metric_with_offset_window +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) AS metric_time__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__day + , subq_12.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__day + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_10.metric_time__day + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_8.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.metric_time__day = subq_13.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql new file mode 100644 index 0000000000..5cf5df3495 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql @@ -0,0 +1,62 @@ +test_name: test_derived_metric_with_offset_window +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) AS metric_time__day + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.metric_time__day = subq_27.metric_time__day + GROUP BY + COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql new file mode 100644 index 0000000000..3f84243c6c --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql @@ -0,0 +1,610 @@ +test_name: test_derived_metric_with_offset_window_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__quarter + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__quarter, subq_13.metric_time__quarter) AS metric_time__quarter + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__quarter + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__quarter + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__quarter'] + SELECT + subq_1.metric_time__quarter + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__quarter + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__quarter + , subq_12.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__quarter + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__quarter'] + SELECT + subq_10.metric_time__quarter + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_9.metric_time__quarter AS metric_time__quarter + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__quarter'] + SELECT + subq_8.metric_time__day + , subq_8.metric_time__quarter + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__quarter + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.metric_time__quarter = subq_13.metric_time__quarter + GROUP BY + COALESCE(subq_4.metric_time__quarter, subq_13.metric_time__quarter) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..fd3ec8cb32 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql @@ -0,0 +1,63 @@ +test_name: test_derived_metric_with_offset_window_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('quarter', ds) AS metric_time__quarter + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__quarter AS metric_time__quarter + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.metric_time__quarter, subq_27.metric_time__quarter) AS metric_time__quarter + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__quarter'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__quarter + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__quarter + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__quarter'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + DATE_TRUNC('quarter', time_spine_src_28006.ds) AS metric_time__quarter + , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + DATE_TRUNC('quarter', time_spine_src_28006.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.metric_time__quarter = subq_27.metric_time__quarter + GROUP BY + COALESCE(subq_19.metric_time__quarter, subq_27.metric_time__quarter) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql new file mode 100644 index 0000000000..d526da3ced --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql @@ -0,0 +1,756 @@ +test_name: test_derived_metric_with_offset_window_and_offset_to_grain +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day + , month_start_bookings - bookings_1_month_ago AS bookings_month_start_compared_to_1_month_prior +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) AS metric_time__day + , MAX(subq_8.month_start_bookings) AS month_start_bookings + , MAX(subq_17.bookings_1_month_ago) AS bookings_1_month_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.bookings AS month_start_bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_16.metric_time__day + , subq_16.bookings AS bookings_1_month_ago + FROM ( + -- Aggregate Measures + SELECT + subq_15.metric_time__day + , SUM(subq_15.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_14.metric_time__day + , subq_14.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_10.ds__day AS ds__day + , subq_10.ds__week AS ds__week + , subq_10.ds__month AS ds__month + , subq_10.ds__quarter AS ds__quarter + , subq_10.ds__year AS ds__year + , subq_10.ds__extract_year AS ds__extract_year + , subq_10.ds__extract_quarter AS ds__extract_quarter + , subq_10.ds__extract_month AS ds__extract_month + , subq_10.ds__extract_day AS ds__extract_day + , subq_10.ds__extract_dow AS ds__extract_dow + , subq_10.ds__extract_doy AS ds__extract_doy + , subq_10.ds_partitioned__day AS ds_partitioned__day + , subq_10.ds_partitioned__week AS ds_partitioned__week + , subq_10.ds_partitioned__month AS ds_partitioned__month + , subq_10.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_10.ds_partitioned__year AS ds_partitioned__year + , subq_10.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_10.paid_at__day AS paid_at__day + , subq_10.paid_at__week AS paid_at__week + , subq_10.paid_at__month AS paid_at__month + , subq_10.paid_at__quarter AS paid_at__quarter + , subq_10.paid_at__year AS paid_at__year + , subq_10.paid_at__extract_year AS paid_at__extract_year + , subq_10.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_10.paid_at__extract_month AS paid_at__extract_month + , subq_10.paid_at__extract_day AS paid_at__extract_day + , subq_10.paid_at__extract_dow AS paid_at__extract_dow + , subq_10.paid_at__extract_doy AS paid_at__extract_doy + , subq_10.booking__ds__day AS booking__ds__day + , subq_10.booking__ds__week AS booking__ds__week + , subq_10.booking__ds__month AS booking__ds__month + , subq_10.booking__ds__quarter AS booking__ds__quarter + , subq_10.booking__ds__year AS booking__ds__year + , subq_10.booking__ds__extract_year AS booking__ds__extract_year + , subq_10.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_10.booking__ds__extract_month AS booking__ds__extract_month + , subq_10.booking__ds__extract_day AS booking__ds__extract_day + , subq_10.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_10.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day AS booking__paid_at__day + , subq_10.booking__paid_at__week AS booking__paid_at__week + , subq_10.booking__paid_at__month AS booking__paid_at__month + , subq_10.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_10.booking__paid_at__year AS booking__paid_at__year + , subq_10.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_10.metric_time__week AS metric_time__week + , subq_10.metric_time__month AS metric_time__month + , subq_10.metric_time__quarter AS metric_time__quarter + , subq_10.metric_time__year AS metric_time__year + , subq_10.metric_time__extract_year AS metric_time__extract_year + , subq_10.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_10.metric_time__extract_month AS metric_time__extract_month + , subq_10.metric_time__extract_day AS metric_time__extract_day + , subq_10.metric_time__extract_dow AS metric_time__extract_dow + , subq_10.metric_time__extract_doy AS metric_time__extract_doy + , subq_13.metric_time__day AS metric_time__day + , subq_10.listing AS listing + , subq_10.guest AS guest + , subq_10.host AS host + , subq_10.booking__listing AS booking__listing + , subq_10.booking__guest AS booking__guest + , subq_10.booking__host AS booking__host + , subq_10.is_instant AS is_instant + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + , subq_10.instant_bookings AS instant_bookings + , subq_10.booking_value AS booking_value + , subq_10.max_booking_value AS max_booking_value + , subq_10.min_booking_value AS min_booking_value + , subq_10.bookers AS bookers + , subq_10.average_booking_value AS average_booking_value + , subq_10.referred_bookings AS referred_bookings + , subq_10.median_booking_value AS median_booking_value + , subq_10.booking_value_p99 AS booking_value_p99 + , subq_10.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_12.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_11.ds__day AS metric_time__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.paid_at__day + , subq_9.paid_at__week + , subq_9.paid_at__month + , subq_9.paid_at__quarter + , subq_9.paid_at__year + , subq_9.paid_at__extract_year + , subq_9.paid_at__extract_quarter + , subq_9.paid_at__extract_month + , subq_9.paid_at__extract_day + , subq_9.paid_at__extract_dow + , subq_9.paid_at__extract_doy + , subq_9.booking__ds__day + , subq_9.booking__ds__week + , subq_9.booking__ds__month + , subq_9.booking__ds__quarter + , subq_9.booking__ds__year + , subq_9.booking__ds__extract_year + , subq_9.booking__ds__extract_quarter + , subq_9.booking__ds__extract_month + , subq_9.booking__ds__extract_day + , subq_9.booking__ds__extract_dow + , subq_9.booking__ds__extract_doy + , subq_9.booking__ds_partitioned__day + , subq_9.booking__ds_partitioned__week + , subq_9.booking__ds_partitioned__month + , subq_9.booking__ds_partitioned__quarter + , subq_9.booking__ds_partitioned__year + , subq_9.booking__ds_partitioned__extract_year + , subq_9.booking__ds_partitioned__extract_quarter + , subq_9.booking__ds_partitioned__extract_month + , subq_9.booking__ds_partitioned__extract_day + , subq_9.booking__ds_partitioned__extract_dow + , subq_9.booking__ds_partitioned__extract_doy + , subq_9.booking__paid_at__day + , subq_9.booking__paid_at__week + , subq_9.booking__paid_at__month + , subq_9.booking__paid_at__quarter + , subq_9.booking__paid_at__year + , subq_9.booking__paid_at__extract_year + , subq_9.booking__paid_at__extract_quarter + , subq_9.booking__paid_at__extract_month + , subq_9.booking__paid_at__extract_day + , subq_9.booking__paid_at__extract_dow + , subq_9.booking__paid_at__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.guest + , subq_9.host + , subq_9.booking__listing + , subq_9.booking__guest + , subq_9.booking__host + , subq_9.is_instant + , subq_9.booking__is_instant + , subq_9.bookings + , subq_9.instant_bookings + , subq_9.booking_value + , subq_9.max_booking_value + , subq_9.min_booking_value + , subq_9.bookers + , subq_9.average_booking_value + , subq_9.referred_bookings + , subq_9.median_booking_value + , subq_9.booking_value_p99 + , subq_9.discrete_booking_value_p99 + , subq_9.approximate_continuous_booking_value_p99 + , subq_9.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + addMonths(subq_13.metric_time__day, CAST(-1 AS Integer)) = subq_10.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + GROUP BY + subq_15.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_8.metric_time__day = subq_17.metric_time__day + GROUP BY + COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql new file mode 100644 index 0000000000..11f01511d7 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql @@ -0,0 +1,74 @@ +test_name: test_derived_metric_with_offset_window_and_offset_to_grain +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , month_start_bookings - bookings_1_month_ago AS bookings_month_start_compared_to_1_month_prior +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) AS metric_time__day + , MAX(subq_27.month_start_bookings) AS month_start_bookings + , MAX(subq_35.bookings_1_month_ago) AS bookings_1_month_ago + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(sma_28009_cte.bookings) AS month_start_bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + DATE_TRUNC('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(sma_28009_cte.bookings) AS bookings_1_month_ago + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addMonths(rss_28018_cte.ds__day, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + subq_27.metric_time__day = subq_35.metric_time__day + GROUP BY + COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql new file mode 100644 index 0000000000..19794c42be --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql @@ -0,0 +1,759 @@ +test_name: test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__year + , month_start_bookings - bookings_1_month_ago AS bookings_month_start_compared_to_1_month_prior +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.metric_time__year, subq_17.metric_time__year) AS metric_time__year + , MAX(subq_8.month_start_bookings) AS month_start_bookings + , MAX(subq_17.bookings_1_month_ago) AS bookings_1_month_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__year + , subq_7.bookings AS month_start_bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__year + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__year'] + SELECT + subq_5.metric_time__year + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__year AS metric_time__year + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__year'] + SELECT + subq_3.metric_time__day + , subq_3.metric_time__year + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__year AS metric_time__year + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + WHERE subq_4.metric_time__year = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_16.metric_time__year + , subq_16.bookings AS bookings_1_month_ago + FROM ( + -- Aggregate Measures + SELECT + subq_15.metric_time__year + , SUM(subq_15.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__year'] + SELECT + subq_14.metric_time__year + , subq_14.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_10.ds__day AS ds__day + , subq_10.ds__week AS ds__week + , subq_10.ds__month AS ds__month + , subq_10.ds__quarter AS ds__quarter + , subq_10.ds__year AS ds__year + , subq_10.ds__extract_year AS ds__extract_year + , subq_10.ds__extract_quarter AS ds__extract_quarter + , subq_10.ds__extract_month AS ds__extract_month + , subq_10.ds__extract_day AS ds__extract_day + , subq_10.ds__extract_dow AS ds__extract_dow + , subq_10.ds__extract_doy AS ds__extract_doy + , subq_10.ds_partitioned__day AS ds_partitioned__day + , subq_10.ds_partitioned__week AS ds_partitioned__week + , subq_10.ds_partitioned__month AS ds_partitioned__month + , subq_10.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_10.ds_partitioned__year AS ds_partitioned__year + , subq_10.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_10.paid_at__day AS paid_at__day + , subq_10.paid_at__week AS paid_at__week + , subq_10.paid_at__month AS paid_at__month + , subq_10.paid_at__quarter AS paid_at__quarter + , subq_10.paid_at__year AS paid_at__year + , subq_10.paid_at__extract_year AS paid_at__extract_year + , subq_10.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_10.paid_at__extract_month AS paid_at__extract_month + , subq_10.paid_at__extract_day AS paid_at__extract_day + , subq_10.paid_at__extract_dow AS paid_at__extract_dow + , subq_10.paid_at__extract_doy AS paid_at__extract_doy + , subq_10.booking__ds__day AS booking__ds__day + , subq_10.booking__ds__week AS booking__ds__week + , subq_10.booking__ds__month AS booking__ds__month + , subq_10.booking__ds__quarter AS booking__ds__quarter + , subq_10.booking__ds__year AS booking__ds__year + , subq_10.booking__ds__extract_year AS booking__ds__extract_year + , subq_10.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_10.booking__ds__extract_month AS booking__ds__extract_month + , subq_10.booking__ds__extract_day AS booking__ds__extract_day + , subq_10.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_10.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day AS booking__paid_at__day + , subq_10.booking__paid_at__week AS booking__paid_at__week + , subq_10.booking__paid_at__month AS booking__paid_at__month + , subq_10.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_10.booking__paid_at__year AS booking__paid_at__year + , subq_10.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_10.metric_time__week AS metric_time__week + , subq_10.metric_time__month AS metric_time__month + , subq_10.metric_time__quarter AS metric_time__quarter + , subq_10.metric_time__extract_year AS metric_time__extract_year + , subq_10.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_10.metric_time__extract_month AS metric_time__extract_month + , subq_10.metric_time__extract_day AS metric_time__extract_day + , subq_10.metric_time__extract_dow AS metric_time__extract_dow + , subq_10.metric_time__extract_doy AS metric_time__extract_doy + , subq_13.metric_time__day AS metric_time__day + , subq_13.metric_time__year AS metric_time__year + , subq_10.listing AS listing + , subq_10.guest AS guest + , subq_10.host AS host + , subq_10.booking__listing AS booking__listing + , subq_10.booking__guest AS booking__guest + , subq_10.booking__host AS booking__host + , subq_10.is_instant AS is_instant + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + , subq_10.instant_bookings AS instant_bookings + , subq_10.booking_value AS booking_value + , subq_10.max_booking_value AS max_booking_value + , subq_10.min_booking_value AS min_booking_value + , subq_10.bookers AS bookers + , subq_10.average_booking_value AS average_booking_value + , subq_10.referred_bookings AS referred_bookings + , subq_10.median_booking_value AS median_booking_value + , subq_10.booking_value_p99 AS booking_value_p99 + , subq_10.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__year'] + SELECT + subq_12.metric_time__day + , subq_12.metric_time__year + FROM ( + -- Change Column Aliases + SELECT + subq_11.ds__day AS metric_time__day + , subq_11.ds__year AS metric_time__year + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.paid_at__day + , subq_9.paid_at__week + , subq_9.paid_at__month + , subq_9.paid_at__quarter + , subq_9.paid_at__year + , subq_9.paid_at__extract_year + , subq_9.paid_at__extract_quarter + , subq_9.paid_at__extract_month + , subq_9.paid_at__extract_day + , subq_9.paid_at__extract_dow + , subq_9.paid_at__extract_doy + , subq_9.booking__ds__day + , subq_9.booking__ds__week + , subq_9.booking__ds__month + , subq_9.booking__ds__quarter + , subq_9.booking__ds__year + , subq_9.booking__ds__extract_year + , subq_9.booking__ds__extract_quarter + , subq_9.booking__ds__extract_month + , subq_9.booking__ds__extract_day + , subq_9.booking__ds__extract_dow + , subq_9.booking__ds__extract_doy + , subq_9.booking__ds_partitioned__day + , subq_9.booking__ds_partitioned__week + , subq_9.booking__ds_partitioned__month + , subq_9.booking__ds_partitioned__quarter + , subq_9.booking__ds_partitioned__year + , subq_9.booking__ds_partitioned__extract_year + , subq_9.booking__ds_partitioned__extract_quarter + , subq_9.booking__ds_partitioned__extract_month + , subq_9.booking__ds_partitioned__extract_day + , subq_9.booking__ds_partitioned__extract_dow + , subq_9.booking__ds_partitioned__extract_doy + , subq_9.booking__paid_at__day + , subq_9.booking__paid_at__week + , subq_9.booking__paid_at__month + , subq_9.booking__paid_at__quarter + , subq_9.booking__paid_at__year + , subq_9.booking__paid_at__extract_year + , subq_9.booking__paid_at__extract_quarter + , subq_9.booking__paid_at__extract_month + , subq_9.booking__paid_at__extract_day + , subq_9.booking__paid_at__extract_dow + , subq_9.booking__paid_at__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.guest + , subq_9.host + , subq_9.booking__listing + , subq_9.booking__guest + , subq_9.booking__host + , subq_9.is_instant + , subq_9.booking__is_instant + , subq_9.bookings + , subq_9.instant_bookings + , subq_9.booking_value + , subq_9.max_booking_value + , subq_9.min_booking_value + , subq_9.bookers + , subq_9.average_booking_value + , subq_9.referred_bookings + , subq_9.median_booking_value + , subq_9.booking_value_p99 + , subq_9.discrete_booking_value_p99 + , subq_9.approximate_continuous_booking_value_p99 + , subq_9.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + addMonths(subq_13.metric_time__day, CAST(-1 AS Integer)) = subq_10.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + GROUP BY + subq_15.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_8.metric_time__year = subq_17.metric_time__year + GROUP BY + COALESCE(subq_8.metric_time__year, subq_17.metric_time__year) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..18817d57ef --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql @@ -0,0 +1,76 @@ +test_name: test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + , DATE_TRUNC('year', ds) AS ds__year + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__year AS metric_time__year + , month_start_bookings - bookings_1_month_ago AS bookings_month_start_compared_to_1_month_prior +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_27.metric_time__year, subq_35.metric_time__year) AS metric_time__year + , MAX(subq_27.month_start_bookings) AS month_start_bookings + , MAX(subq_35.bookings_1_month_ago) AS bookings_1_month_ago + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__year'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__year AS metric_time__year + , SUM(sma_28009_cte.bookings) AS month_start_bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + DATE_TRUNC('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day + WHERE rss_28018_cte.ds__year = rss_28018_cte.ds__day + GROUP BY + rss_28018_cte.ds__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__year'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__year AS metric_time__year + , SUM(sma_28009_cte.bookings) AS bookings_1_month_ago + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addMonths(rss_28018_cte.ds__day, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + rss_28018_cte.ds__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + subq_27.metric_time__year = subq_35.metric_time__year + GROUP BY + COALESCE(subq_27.metric_time__year, subq_35.metric_time__year) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql new file mode 100644 index 0000000000..e93360ce5f --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql @@ -0,0 +1,817 @@ +test_name: test_derived_metric_with_offset_window_and_time_filter +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.metric_time__day, subq_15.metric_time__day) AS metric_time__day + , MAX(subq_5.bookings) AS bookings + , MAX(subq_15.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , subq_4.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_14.metric_time__day + , subq_14.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_13.metric_time__day + , SUM(subq_13.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_12.metric_time__day + , subq_12.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_partitioned__day + , subq_11.ds_partitioned__week + , subq_11.ds_partitioned__month + , subq_11.ds_partitioned__quarter + , subq_11.ds_partitioned__year + , subq_11.ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy + , subq_11.paid_at__day + , subq_11.paid_at__week + , subq_11.paid_at__month + , subq_11.paid_at__quarter + , subq_11.paid_at__year + , subq_11.paid_at__extract_year + , subq_11.paid_at__extract_quarter + , subq_11.paid_at__extract_month + , subq_11.paid_at__extract_day + , subq_11.paid_at__extract_dow + , subq_11.paid_at__extract_doy + , subq_11.booking__ds__day + , subq_11.booking__ds__week + , subq_11.booking__ds__month + , subq_11.booking__ds__quarter + , subq_11.booking__ds__year + , subq_11.booking__ds__extract_year + , subq_11.booking__ds__extract_quarter + , subq_11.booking__ds__extract_month + , subq_11.booking__ds__extract_day + , subq_11.booking__ds__extract_dow + , subq_11.booking__ds__extract_doy + , subq_11.booking__ds_partitioned__day + , subq_11.booking__ds_partitioned__week + , subq_11.booking__ds_partitioned__month + , subq_11.booking__ds_partitioned__quarter + , subq_11.booking__ds_partitioned__year + , subq_11.booking__ds_partitioned__extract_year + , subq_11.booking__ds_partitioned__extract_quarter + , subq_11.booking__ds_partitioned__extract_month + , subq_11.booking__ds_partitioned__extract_day + , subq_11.booking__ds_partitioned__extract_dow + , subq_11.booking__ds_partitioned__extract_doy + , subq_11.booking__paid_at__day + , subq_11.booking__paid_at__week + , subq_11.booking__paid_at__month + , subq_11.booking__paid_at__quarter + , subq_11.booking__paid_at__year + , subq_11.booking__paid_at__extract_year + , subq_11.booking__paid_at__extract_quarter + , subq_11.booking__paid_at__extract_month + , subq_11.booking__paid_at__extract_day + , subq_11.booking__paid_at__extract_dow + , subq_11.booking__paid_at__extract_doy + , subq_11.metric_time__week + , subq_11.metric_time__month + , subq_11.metric_time__quarter + , subq_11.metric_time__year + , subq_11.metric_time__extract_year + , subq_11.metric_time__extract_quarter + , subq_11.metric_time__extract_month + , subq_11.metric_time__extract_day + , subq_11.metric_time__extract_dow + , subq_11.metric_time__extract_doy + , subq_11.metric_time__day + , subq_11.listing + , subq_11.guest + , subq_11.host + , subq_11.booking__listing + , subq_11.booking__guest + , subq_11.booking__host + , subq_11.is_instant + , subq_11.booking__is_instant + , subq_11.bookings + , subq_11.instant_bookings + , subq_11.booking_value + , subq_11.max_booking_value + , subq_11.min_booking_value + , subq_11.bookers + , subq_11.average_booking_value + , subq_11.referred_bookings + , subq_11.median_booking_value + , subq_11.booking_value_p99 + , subq_11.discrete_booking_value_p99 + , subq_11.approximate_continuous_booking_value_p99 + , subq_11.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_7.ds__day AS ds__day + , subq_7.ds__week AS ds__week + , subq_7.ds__month AS ds__month + , subq_7.ds__quarter AS ds__quarter + , subq_7.ds__year AS ds__year + , subq_7.ds__extract_year AS ds__extract_year + , subq_7.ds__extract_quarter AS ds__extract_quarter + , subq_7.ds__extract_month AS ds__extract_month + , subq_7.ds__extract_day AS ds__extract_day + , subq_7.ds__extract_dow AS ds__extract_dow + , subq_7.ds__extract_doy AS ds__extract_doy + , subq_7.ds_partitioned__day AS ds_partitioned__day + , subq_7.ds_partitioned__week AS ds_partitioned__week + , subq_7.ds_partitioned__month AS ds_partitioned__month + , subq_7.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_7.ds_partitioned__year AS ds_partitioned__year + , subq_7.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_7.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_7.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_7.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_7.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_7.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_7.paid_at__day AS paid_at__day + , subq_7.paid_at__week AS paid_at__week + , subq_7.paid_at__month AS paid_at__month + , subq_7.paid_at__quarter AS paid_at__quarter + , subq_7.paid_at__year AS paid_at__year + , subq_7.paid_at__extract_year AS paid_at__extract_year + , subq_7.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_7.paid_at__extract_month AS paid_at__extract_month + , subq_7.paid_at__extract_day AS paid_at__extract_day + , subq_7.paid_at__extract_dow AS paid_at__extract_dow + , subq_7.paid_at__extract_doy AS paid_at__extract_doy + , subq_7.booking__ds__day AS booking__ds__day + , subq_7.booking__ds__week AS booking__ds__week + , subq_7.booking__ds__month AS booking__ds__month + , subq_7.booking__ds__quarter AS booking__ds__quarter + , subq_7.booking__ds__year AS booking__ds__year + , subq_7.booking__ds__extract_year AS booking__ds__extract_year + , subq_7.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_7.booking__ds__extract_month AS booking__ds__extract_month + , subq_7.booking__ds__extract_day AS booking__ds__extract_day + , subq_7.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_7.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_7.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_7.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_7.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_7.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_7.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_7.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_7.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_7.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_7.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_7.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_7.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_7.booking__paid_at__day AS booking__paid_at__day + , subq_7.booking__paid_at__week AS booking__paid_at__week + , subq_7.booking__paid_at__month AS booking__paid_at__month + , subq_7.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_7.booking__paid_at__year AS booking__paid_at__year + , subq_7.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_7.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_7.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_7.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_7.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_7.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_7.metric_time__week AS metric_time__week + , subq_7.metric_time__month AS metric_time__month + , subq_7.metric_time__quarter AS metric_time__quarter + , subq_7.metric_time__year AS metric_time__year + , subq_7.metric_time__extract_year AS metric_time__extract_year + , subq_7.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_7.metric_time__extract_month AS metric_time__extract_month + , subq_7.metric_time__extract_day AS metric_time__extract_day + , subq_7.metric_time__extract_dow AS metric_time__extract_dow + , subq_7.metric_time__extract_doy AS metric_time__extract_doy + , subq_10.metric_time__day AS metric_time__day + , subq_7.listing AS listing + , subq_7.guest AS guest + , subq_7.host AS host + , subq_7.booking__listing AS booking__listing + , subq_7.booking__guest AS booking__guest + , subq_7.booking__host AS booking__host + , subq_7.is_instant AS is_instant + , subq_7.booking__is_instant AS booking__is_instant + , subq_7.bookings AS bookings + , subq_7.instant_bookings AS instant_bookings + , subq_7.booking_value AS booking_value + , subq_7.max_booking_value AS max_booking_value + , subq_7.min_booking_value AS min_booking_value + , subq_7.bookers AS bookers + , subq_7.average_booking_value AS average_booking_value + , subq_7.referred_bookings AS referred_bookings + , subq_7.median_booking_value AS median_booking_value + , subq_7.booking_value_p99 AS booking_value_p99 + , subq_7.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_7.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_7.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_9.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_8.ds__day AS metric_time__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds_partitioned__day + , subq_6.ds_partitioned__week + , subq_6.ds_partitioned__month + , subq_6.ds_partitioned__quarter + , subq_6.ds_partitioned__year + , subq_6.ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy + , subq_6.paid_at__day + , subq_6.paid_at__week + , subq_6.paid_at__month + , subq_6.paid_at__quarter + , subq_6.paid_at__year + , subq_6.paid_at__extract_year + , subq_6.paid_at__extract_quarter + , subq_6.paid_at__extract_month + , subq_6.paid_at__extract_day + , subq_6.paid_at__extract_dow + , subq_6.paid_at__extract_doy + , subq_6.booking__ds__day + , subq_6.booking__ds__week + , subq_6.booking__ds__month + , subq_6.booking__ds__quarter + , subq_6.booking__ds__year + , subq_6.booking__ds__extract_year + , subq_6.booking__ds__extract_quarter + , subq_6.booking__ds__extract_month + , subq_6.booking__ds__extract_day + , subq_6.booking__ds__extract_dow + , subq_6.booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day + , subq_6.booking__paid_at__week + , subq_6.booking__paid_at__month + , subq_6.booking__paid_at__quarter + , subq_6.booking__paid_at__year + , subq_6.booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.guest + , subq_6.host + , subq_6.booking__listing + , subq_6.booking__guest + , subq_6.booking__host + , subq_6.is_instant + , subq_6.booking__is_instant + , subq_6.bookings + , subq_6.instant_bookings + , subq_6.booking_value + , subq_6.max_booking_value + , subq_6.min_booking_value + , subq_6.bookers + , subq_6.average_booking_value + , subq_6.referred_bookings + , subq_6.median_booking_value + , subq_6.booking_value_p99 + , subq_6.discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + addDays(subq_10.metric_time__day, CAST(-14 AS Integer)) = subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + GROUP BY + subq_13.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_5.metric_time__day = subq_15.metric_time__day + GROUP BY + COALESCE(subq_5.metric_time__day, subq_15.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql new file mode 100644 index 0000000000..c55ecc4233 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql @@ -0,0 +1,78 @@ +test_name: test_derived_metric_with_offset_window_and_time_filter +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_22.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , MAX(subq_22.bookings) AS bookings + , MAX(subq_31.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + metric_time__day + , bookings + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + FULL OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings_2_weeks_ago + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , sma_28009_cte.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_22.metric_time__day = subq_31.metric_time__day + GROUP BY + COALESCE(subq_22.metric_time__day, subq_31.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql new file mode 100644 index 0000000000..6aee6cf437 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql @@ -0,0 +1,487 @@ +test_name: test_derived_offset_cumulative_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day + , every_2_days_bookers_2_days_ago AS every_2_days_bookers_2_days_ago +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_10.metric_time__day + , subq_10.bookers AS every_2_days_bookers_2_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_9.metric_time__day + , COUNT(DISTINCT subq_9.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__day'] + SELECT + subq_8.metric_time__day + , subq_8.bookers + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_4.ds__day AS ds__day + , subq_4.ds__week AS ds__week + , subq_4.ds__month AS ds__month + , subq_4.ds__quarter AS ds__quarter + , subq_4.ds__year AS ds__year + , subq_4.ds__extract_year AS ds__extract_year + , subq_4.ds__extract_quarter AS ds__extract_quarter + , subq_4.ds__extract_month AS ds__extract_month + , subq_4.ds__extract_day AS ds__extract_day + , subq_4.ds__extract_dow AS ds__extract_dow + , subq_4.ds__extract_doy AS ds__extract_doy + , subq_4.ds_partitioned__day AS ds_partitioned__day + , subq_4.ds_partitioned__week AS ds_partitioned__week + , subq_4.ds_partitioned__month AS ds_partitioned__month + , subq_4.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_4.ds_partitioned__year AS ds_partitioned__year + , subq_4.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_4.paid_at__day AS paid_at__day + , subq_4.paid_at__week AS paid_at__week + , subq_4.paid_at__month AS paid_at__month + , subq_4.paid_at__quarter AS paid_at__quarter + , subq_4.paid_at__year AS paid_at__year + , subq_4.paid_at__extract_year AS paid_at__extract_year + , subq_4.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_4.paid_at__extract_month AS paid_at__extract_month + , subq_4.paid_at__extract_day AS paid_at__extract_day + , subq_4.paid_at__extract_dow AS paid_at__extract_dow + , subq_4.paid_at__extract_doy AS paid_at__extract_doy + , subq_4.booking__ds__day AS booking__ds__day + , subq_4.booking__ds__week AS booking__ds__week + , subq_4.booking__ds__month AS booking__ds__month + , subq_4.booking__ds__quarter AS booking__ds__quarter + , subq_4.booking__ds__year AS booking__ds__year + , subq_4.booking__ds__extract_year AS booking__ds__extract_year + , subq_4.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_4.booking__ds__extract_month AS booking__ds__extract_month + , subq_4.booking__ds__extract_day AS booking__ds__extract_day + , subq_4.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_4.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day AS booking__paid_at__day + , subq_4.booking__paid_at__week AS booking__paid_at__week + , subq_4.booking__paid_at__month AS booking__paid_at__month + , subq_4.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_4.booking__paid_at__year AS booking__paid_at__year + , subq_4.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_4.metric_time__week AS metric_time__week + , subq_4.metric_time__month AS metric_time__month + , subq_4.metric_time__quarter AS metric_time__quarter + , subq_4.metric_time__year AS metric_time__year + , subq_4.metric_time__extract_year AS metric_time__extract_year + , subq_4.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_4.metric_time__extract_month AS metric_time__extract_month + , subq_4.metric_time__extract_day AS metric_time__extract_day + , subq_4.metric_time__extract_dow AS metric_time__extract_dow + , subq_4.metric_time__extract_doy AS metric_time__extract_doy + , subq_7.metric_time__day AS metric_time__day + , subq_4.listing AS listing + , subq_4.guest AS guest + , subq_4.host AS host + , subq_4.booking__listing AS booking__listing + , subq_4.booking__guest AS booking__guest + , subq_4.booking__host AS booking__host + , subq_4.is_instant AS is_instant + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + , subq_4.instant_bookings AS instant_bookings + , subq_4.booking_value AS booking_value + , subq_4.max_booking_value AS max_booking_value + , subq_4.min_booking_value AS min_booking_value + , subq_4.bookers AS bookers + , subq_4.average_booking_value AS average_booking_value + , subq_4.referred_bookings AS referred_bookings + , subq_4.median_booking_value AS median_booking_value + , subq_4.booking_value_p99 AS booking_value_p99 + , subq_4.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_4.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_4.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + INNER JOIN + ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + addDays(subq_7.metric_time__day, CAST(-2 AS Integer)) = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql new file mode 100644 index 0000000000..52734f25f2 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql @@ -0,0 +1,35 @@ +test_name: test_derived_offset_cumulative_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , every_2_days_bookers_2_days_ago AS every_2_days_bookers_2_days_ago +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookers', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , COUNT(DISTINCT subq_16.bookers) AS every_2_days_bookers_2_days_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Join Self Over Time Range + SELECT + subq_15.ds AS metric_time__day + , bookings_source_src_28000.guest_id AS bookers + FROM ***************************.mf_time_spine subq_15 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + ON + addDays(time_spine_src_28006.ds, CAST(-2 AS Integer)) = subq_16.metric_time__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_23 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql new file mode 100644 index 0000000000..8cdea596fc --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql @@ -0,0 +1,609 @@ +test_name: test_derived_offset_metric_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.booking__ds__day + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.booking__ds__day, subq_13.booking__ds__day) AS booking__ds__day + , MAX(subq_8.booking_value) AS booking_value + , MAX(subq_13.bookers) AS bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.booking__ds__day + , subq_7.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_6.booking__ds__day + , SUM(subq_6.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'booking__ds__day'] + SELECT + subq_5.booking__ds__day + , subq_5.booking_value + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.booking__ds__day AS booking__ds__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['booking__ds__day',] + SELECT + subq_3.booking__ds__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS booking__ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addWeeks(subq_4.booking__ds__day, CAST(-1 AS Integer)) = subq_1.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.booking__ds__day + , subq_12.bookers + FROM ( + -- Aggregate Measures + SELECT + subq_11.booking__ds__day + , COUNT(DISTINCT subq_11.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'booking__ds__day'] + SELECT + subq_10.booking__ds__day + , subq_10.bookers + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.paid_at__day + , subq_9.paid_at__week + , subq_9.paid_at__month + , subq_9.paid_at__quarter + , subq_9.paid_at__year + , subq_9.paid_at__extract_year + , subq_9.paid_at__extract_quarter + , subq_9.paid_at__extract_month + , subq_9.paid_at__extract_day + , subq_9.paid_at__extract_dow + , subq_9.paid_at__extract_doy + , subq_9.booking__ds__day + , subq_9.booking__ds__week + , subq_9.booking__ds__month + , subq_9.booking__ds__quarter + , subq_9.booking__ds__year + , subq_9.booking__ds__extract_year + , subq_9.booking__ds__extract_quarter + , subq_9.booking__ds__extract_month + , subq_9.booking__ds__extract_day + , subq_9.booking__ds__extract_dow + , subq_9.booking__ds__extract_doy + , subq_9.booking__ds_partitioned__day + , subq_9.booking__ds_partitioned__week + , subq_9.booking__ds_partitioned__month + , subq_9.booking__ds_partitioned__quarter + , subq_9.booking__ds_partitioned__year + , subq_9.booking__ds_partitioned__extract_year + , subq_9.booking__ds_partitioned__extract_quarter + , subq_9.booking__ds_partitioned__extract_month + , subq_9.booking__ds_partitioned__extract_day + , subq_9.booking__ds_partitioned__extract_dow + , subq_9.booking__ds_partitioned__extract_doy + , subq_9.booking__paid_at__day + , subq_9.booking__paid_at__week + , subq_9.booking__paid_at__month + , subq_9.booking__paid_at__quarter + , subq_9.booking__paid_at__year + , subq_9.booking__paid_at__extract_year + , subq_9.booking__paid_at__extract_quarter + , subq_9.booking__paid_at__extract_month + , subq_9.booking__paid_at__extract_day + , subq_9.booking__paid_at__extract_dow + , subq_9.booking__paid_at__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.guest + , subq_9.host + , subq_9.booking__listing + , subq_9.booking__guest + , subq_9.booking__host + , subq_9.is_instant + , subq_9.booking__is_instant + , subq_9.bookings + , subq_9.instant_bookings + , subq_9.booking_value + , subq_9.max_booking_value + , subq_9.min_booking_value + , subq_9.bookers + , subq_9.average_booking_value + , subq_9.referred_bookings + , subq_9.median_booking_value + , subq_9.booking_value_p99 + , subq_9.discrete_booking_value_p99 + , subq_9.approximate_continuous_booking_value_p99 + , subq_9.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_8.booking__ds__day = subq_13.booking__ds__day + GROUP BY + COALESCE(subq_8.booking__ds__day, subq_13.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql new file mode 100644 index 0000000000..b088a09817 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql @@ -0,0 +1,63 @@ +test_name: test_derived_offset_metric_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS booking__ds__day + , booking_value + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + booking__ds__day AS booking__ds__day + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_23.booking__ds__day, subq_27.booking__ds__day) AS booking__ds__day + , MAX(subq_23.booking_value) AS booking_value + , MAX(subq_27.bookers) AS bookers + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['booking_value', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS booking__ds__day + , SUM(sma_28009_cte.booking_value) AS booking_value + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.booking__ds__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + FULL OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookers', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + booking__ds__day + , COUNT(DISTINCT bookers) AS bookers + FROM sma_28009_cte sma_28009_cte + GROUP BY + booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_23.booking__ds__day = subq_27.booking__ds__day + GROUP BY + COALESCE(subq_23.booking__ds__day, subq_27.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql new file mode 100644 index 0000000000..5d5ca877dc --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql @@ -0,0 +1,376 @@ +test_name: test_derived_offset_metric_with_one_input_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.bookings AS bookings_5_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql new file mode 100644 index 0000000000..0d140ce822 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_derived_offset_metric_with_one_input_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , SUM(subq_10.bookings) AS bookings_5_days_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_10.metric_time__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql new file mode 100644 index 0000000000..7783cc1fdd --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql @@ -0,0 +1,399 @@ +test_name: test_multi_metric_fill_null +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) AS metric_time__day + , MAX(subq_5.twice_bookings_fill_nulls_with_0_without_time_spine) AS twice_bookings_fill_nulls_with_0_without_time_spine + , MAX(subq_10.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_9.metric_time__day + , subq_9.listings + FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , SUM(subq_8.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.listings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.created_at__day + , subq_6.created_at__week + , subq_6.created_at__month + , subq_6.created_at__quarter + , subq_6.created_at__year + , subq_6.created_at__extract_year + , subq_6.created_at__extract_quarter + , subq_6.created_at__extract_month + , subq_6.created_at__extract_day + , subq_6.created_at__extract_dow + , subq_6.created_at__extract_doy + , subq_6.listing__ds__day + , subq_6.listing__ds__week + , subq_6.listing__ds__month + , subq_6.listing__ds__quarter + , subq_6.listing__ds__year + , subq_6.listing__ds__extract_year + , subq_6.listing__ds__extract_quarter + , subq_6.listing__ds__extract_month + , subq_6.listing__ds__extract_day + , subq_6.listing__ds__extract_dow + , subq_6.listing__ds__extract_doy + , subq_6.listing__created_at__day + , subq_6.listing__created_at__week + , subq_6.listing__created_at__month + , subq_6.listing__created_at__quarter + , subq_6.listing__created_at__year + , subq_6.listing__created_at__extract_year + , subq_6.listing__created_at__extract_quarter + , subq_6.listing__created_at__extract_month + , subq_6.listing__created_at__extract_day + , subq_6.listing__created_at__extract_dow + , subq_6.listing__created_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.user + , subq_6.listing__user + , subq_6.country_latest + , subq_6.is_lux_latest + , subq_6.capacity_latest + , subq_6.listing__country_latest + , subq_6.listing__is_lux_latest + , subq_6.listing__capacity_latest + , subq_6.listings + , subq_6.largest_listing + , subq_6.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +ON + subq_5.metric_time__day = subq_10.metric_time__day +GROUP BY + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql new file mode 100644 index 0000000000..ea1fc2344a --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql @@ -0,0 +1,68 @@ +test_name: test_multi_metric_fill_null +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_16.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , MAX(subq_16.twice_bookings_fill_nulls_with_0_without_time_spine) AS twice_bookings_fill_nulls_with_0_without_time_spine + , MAX(subq_21.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +FULL OUTER JOIN +( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(listings) AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +ON + subq_16.metric_time__day = subq_21.metric_time__day +GROUP BY + COALESCE(subq_16.metric_time__day, subq_21.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql new file mode 100644 index 0000000000..0481bceee4 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql @@ -0,0 +1,926 @@ +test_name: test_nested_derived_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_22.metric_time__day + , non_referred + (instant * 1.0 / bookings) AS instant_plus_non_referred_bookings_pct +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_11.metric_time__day, subq_16.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , MAX(subq_11.non_referred) AS non_referred + , MAX(subq_16.instant) AS instant + , MAX(subq_21.bookings) AS bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_10.metric_time__day + , (bookings - ref_bookings) * 1.0 / bookings AS non_referred + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) AS metric_time__day + , MAX(subq_4.ref_bookings) AS ref_bookings + , MAX(subq_9.bookings) AS bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.referred_bookings AS ref_bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.referred_bookings) AS referred_bookings + FROM ( + -- Pass Only Elements: ['referred_bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.referred_bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + subq_4.metric_time__day = subq_9.metric_time__day + GROUP BY + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_15.metric_time__day + , subq_15.instant_bookings AS instant + FROM ( + -- Aggregate Measures + SELECT + subq_14.metric_time__day + , SUM(subq_14.instant_bookings) AS instant_bookings + FROM ( + -- Pass Only Elements: ['instant_bookings', 'metric_time__day'] + SELECT + subq_13.metric_time__day + , subq_13.instant_bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds_partitioned__day + , subq_12.ds_partitioned__week + , subq_12.ds_partitioned__month + , subq_12.ds_partitioned__quarter + , subq_12.ds_partitioned__year + , subq_12.ds_partitioned__extract_year + , subq_12.ds_partitioned__extract_quarter + , subq_12.ds_partitioned__extract_month + , subq_12.ds_partitioned__extract_day + , subq_12.ds_partitioned__extract_dow + , subq_12.ds_partitioned__extract_doy + , subq_12.paid_at__day + , subq_12.paid_at__week + , subq_12.paid_at__month + , subq_12.paid_at__quarter + , subq_12.paid_at__year + , subq_12.paid_at__extract_year + , subq_12.paid_at__extract_quarter + , subq_12.paid_at__extract_month + , subq_12.paid_at__extract_day + , subq_12.paid_at__extract_dow + , subq_12.paid_at__extract_doy + , subq_12.booking__ds__day + , subq_12.booking__ds__week + , subq_12.booking__ds__month + , subq_12.booking__ds__quarter + , subq_12.booking__ds__year + , subq_12.booking__ds__extract_year + , subq_12.booking__ds__extract_quarter + , subq_12.booking__ds__extract_month + , subq_12.booking__ds__extract_day + , subq_12.booking__ds__extract_dow + , subq_12.booking__ds__extract_doy + , subq_12.booking__ds_partitioned__day + , subq_12.booking__ds_partitioned__week + , subq_12.booking__ds_partitioned__month + , subq_12.booking__ds_partitioned__quarter + , subq_12.booking__ds_partitioned__year + , subq_12.booking__ds_partitioned__extract_year + , subq_12.booking__ds_partitioned__extract_quarter + , subq_12.booking__ds_partitioned__extract_month + , subq_12.booking__ds_partitioned__extract_day + , subq_12.booking__ds_partitioned__extract_dow + , subq_12.booking__ds_partitioned__extract_doy + , subq_12.booking__paid_at__day + , subq_12.booking__paid_at__week + , subq_12.booking__paid_at__month + , subq_12.booking__paid_at__quarter + , subq_12.booking__paid_at__year + , subq_12.booking__paid_at__extract_year + , subq_12.booking__paid_at__extract_quarter + , subq_12.booking__paid_at__extract_month + , subq_12.booking__paid_at__extract_day + , subq_12.booking__paid_at__extract_dow + , subq_12.booking__paid_at__extract_doy + , subq_12.ds__day AS metric_time__day + , subq_12.ds__week AS metric_time__week + , subq_12.ds__month AS metric_time__month + , subq_12.ds__quarter AS metric_time__quarter + , subq_12.ds__year AS metric_time__year + , subq_12.ds__extract_year AS metric_time__extract_year + , subq_12.ds__extract_quarter AS metric_time__extract_quarter + , subq_12.ds__extract_month AS metric_time__extract_month + , subq_12.ds__extract_day AS metric_time__extract_day + , subq_12.ds__extract_dow AS metric_time__extract_dow + , subq_12.ds__extract_doy AS metric_time__extract_doy + , subq_12.listing + , subq_12.guest + , subq_12.host + , subq_12.booking__listing + , subq_12.booking__guest + , subq_12.booking__host + , subq_12.is_instant + , subq_12.booking__is_instant + , subq_12.bookings + , subq_12.instant_bookings + , subq_12.booking_value + , subq_12.max_booking_value + , subq_12.min_booking_value + , subq_12.bookers + , subq_12.average_booking_value + , subq_12.referred_bookings + , subq_12.median_booking_value + , subq_12.booking_value_p99 + , subq_12.discrete_booking_value_p99 + , subq_12.approximate_continuous_booking_value_p99 + , subq_12.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + ON + subq_11.metric_time__day = subq_16.metric_time__day + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_20.metric_time__day + , subq_20.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_19.metric_time__day + , SUM(subq_19.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_18.metric_time__day + , subq_18.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_17.ds__day + , subq_17.ds__week + , subq_17.ds__month + , subq_17.ds__quarter + , subq_17.ds__year + , subq_17.ds__extract_year + , subq_17.ds__extract_quarter + , subq_17.ds__extract_month + , subq_17.ds__extract_day + , subq_17.ds__extract_dow + , subq_17.ds__extract_doy + , subq_17.ds_partitioned__day + , subq_17.ds_partitioned__week + , subq_17.ds_partitioned__month + , subq_17.ds_partitioned__quarter + , subq_17.ds_partitioned__year + , subq_17.ds_partitioned__extract_year + , subq_17.ds_partitioned__extract_quarter + , subq_17.ds_partitioned__extract_month + , subq_17.ds_partitioned__extract_day + , subq_17.ds_partitioned__extract_dow + , subq_17.ds_partitioned__extract_doy + , subq_17.paid_at__day + , subq_17.paid_at__week + , subq_17.paid_at__month + , subq_17.paid_at__quarter + , subq_17.paid_at__year + , subq_17.paid_at__extract_year + , subq_17.paid_at__extract_quarter + , subq_17.paid_at__extract_month + , subq_17.paid_at__extract_day + , subq_17.paid_at__extract_dow + , subq_17.paid_at__extract_doy + , subq_17.booking__ds__day + , subq_17.booking__ds__week + , subq_17.booking__ds__month + , subq_17.booking__ds__quarter + , subq_17.booking__ds__year + , subq_17.booking__ds__extract_year + , subq_17.booking__ds__extract_quarter + , subq_17.booking__ds__extract_month + , subq_17.booking__ds__extract_day + , subq_17.booking__ds__extract_dow + , subq_17.booking__ds__extract_doy + , subq_17.booking__ds_partitioned__day + , subq_17.booking__ds_partitioned__week + , subq_17.booking__ds_partitioned__month + , subq_17.booking__ds_partitioned__quarter + , subq_17.booking__ds_partitioned__year + , subq_17.booking__ds_partitioned__extract_year + , subq_17.booking__ds_partitioned__extract_quarter + , subq_17.booking__ds_partitioned__extract_month + , subq_17.booking__ds_partitioned__extract_day + , subq_17.booking__ds_partitioned__extract_dow + , subq_17.booking__ds_partitioned__extract_doy + , subq_17.booking__paid_at__day + , subq_17.booking__paid_at__week + , subq_17.booking__paid_at__month + , subq_17.booking__paid_at__quarter + , subq_17.booking__paid_at__year + , subq_17.booking__paid_at__extract_year + , subq_17.booking__paid_at__extract_quarter + , subq_17.booking__paid_at__extract_month + , subq_17.booking__paid_at__extract_day + , subq_17.booking__paid_at__extract_dow + , subq_17.booking__paid_at__extract_doy + , subq_17.ds__day AS metric_time__day + , subq_17.ds__week AS metric_time__week + , subq_17.ds__month AS metric_time__month + , subq_17.ds__quarter AS metric_time__quarter + , subq_17.ds__year AS metric_time__year + , subq_17.ds__extract_year AS metric_time__extract_year + , subq_17.ds__extract_quarter AS metric_time__extract_quarter + , subq_17.ds__extract_month AS metric_time__extract_month + , subq_17.ds__extract_day AS metric_time__extract_day + , subq_17.ds__extract_dow AS metric_time__extract_dow + , subq_17.ds__extract_doy AS metric_time__extract_doy + , subq_17.listing + , subq_17.guest + , subq_17.host + , subq_17.booking__listing + , subq_17.booking__guest + , subq_17.booking__host + , subq_17.is_instant + , subq_17.booking__is_instant + , subq_17.bookings + , subq_17.instant_bookings + , subq_17.booking_value + , subq_17.max_booking_value + , subq_17.min_booking_value + , subq_17.bookers + , subq_17.average_booking_value + , subq_17.referred_bookings + , subq_17.median_booking_value + , subq_17.booking_value_p99 + , subq_17.discrete_booking_value_p99 + , subq_17.approximate_continuous_booking_value_p99 + , subq_17.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + GROUP BY + subq_19.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + COALESCE(subq_11.metric_time__day, subq_16.metric_time__day) = subq_21.metric_time__day + GROUP BY + COALESCE(subq_11.metric_time__day, subq_16.metric_time__day, subq_21.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql new file mode 100644 index 0000000000..24725302e0 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql @@ -0,0 +1,74 @@ +test_name: test_nested_derived_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , non_referred + (instant * 1.0 / bookings) AS instant_plus_non_referred_bookings_pct +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_28.metric_time__day, subq_33.metric_time__day) AS metric_time__day + , MAX(subq_28.non_referred) AS non_referred + , MAX(subq_33.instant) AS instant + , MAX(subq_33.bookings) AS bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , (bookings - ref_bookings) * 1.0 / bookings AS non_referred + FROM ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(referred_bookings) AS ref_bookings + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['referred_bookings', 'bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + FULL OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(instant_bookings) AS instant + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['instant_bookings', 'bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_33 + ON + subq_28.metric_time__day = subq_33.metric_time__day + GROUP BY + COALESCE(subq_28.metric_time__day, subq_33.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_34 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql new file mode 100644 index 0000000000..807aef43e4 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql @@ -0,0 +1,456 @@ +test_name: test_nested_derived_metric_offset_with_joined_where_constraint_not_selected +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_15.metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Pass Only Elements: ['metric_time__day', 'bookings_offset_once'] + SELECT + subq_14.metric_time__day + , subq_14.bookings_offset_once + FROM ( + -- Constrain Output with WHERE + SELECT + subq_13.metric_time__day + , subq_13.booking__is_instant + , subq_13.bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_12.metric_time__day AS metric_time__day + , subq_9.booking__is_instant AS booking__is_instant + , subq_9.bookings_offset_once AS bookings_offset_once + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_11.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_10.ds__day AS metric_time__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.booking__is_instant + , 2 * bookings AS bookings_offset_once + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.booking__is_instant + , subq_7.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , subq_6.booking__is_instant + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.booking__is_instant + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + , subq_6.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql new file mode 100644 index 0000000000..259fcd488f --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql @@ -0,0 +1,74 @@ +test_name: test_nested_derived_metric_offset_with_joined_where_constraint_not_selected +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day', 'bookings_offset_once'] + SELECT + metric_time__day + , bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_25.booking__is_instant AS booking__is_instant + , subq_25.bookings_offset_once AS bookings_offset_once + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , booking__is_instant + , 2 * bookings AS bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_17.booking__is_instant AS booking__is_instant + , SUM(subq_17.bookings) AS bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_17.metric_time__day + GROUP BY + rss_28018_cte.ds__day + , subq_17.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + ON + addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_25.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_29 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_31 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql new file mode 100644 index 0000000000..40ec631c90 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql @@ -0,0 +1,527 @@ +test_name: test_nested_derived_metric_with_offset_multiple_input_metrics +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__day + , booking_fees - booking_fees_start_of_month AS booking_fees_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_9.metric_time__day, subq_15.metric_time__day) AS metric_time__day + , MAX(subq_9.booking_fees_start_of_month) AS booking_fees_start_of_month + , MAX(subq_15.booking_fees) AS booking_fees + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_5.booking_fees_start_of_month AS booking_fees_start_of_month + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_6.ds__day AS metric_time__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , booking_value * 0.05 AS booking_fees_start_of_month + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + DATE_TRUNC('month', subq_8.metric_time__day) = subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_14.metric_time__day + , booking_value * 0.05 AS booking_fees + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_13.metric_time__day + , subq_13.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_12.metric_time__day + , SUM(subq_12.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_11.metric_time__day + , subq_11.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.paid_at__day + , subq_10.paid_at__week + , subq_10.paid_at__month + , subq_10.paid_at__quarter + , subq_10.paid_at__year + , subq_10.paid_at__extract_year + , subq_10.paid_at__extract_quarter + , subq_10.paid_at__extract_month + , subq_10.paid_at__extract_day + , subq_10.paid_at__extract_dow + , subq_10.paid_at__extract_doy + , subq_10.booking__ds__day + , subq_10.booking__ds__week + , subq_10.booking__ds__month + , subq_10.booking__ds__quarter + , subq_10.booking__ds__year + , subq_10.booking__ds__extract_year + , subq_10.booking__ds__extract_quarter + , subq_10.booking__ds__extract_month + , subq_10.booking__ds__extract_day + , subq_10.booking__ds__extract_dow + , subq_10.booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day + , subq_10.booking__paid_at__week + , subq_10.booking__paid_at__month + , subq_10.booking__paid_at__quarter + , subq_10.booking__paid_at__year + , subq_10.booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.guest + , subq_10.host + , subq_10.booking__listing + , subq_10.booking__guest + , subq_10.booking__host + , subq_10.is_instant + , subq_10.booking__is_instant + , subq_10.bookings + , subq_10.instant_bookings + , subq_10.booking_value + , subq_10.max_booking_value + , subq_10.min_booking_value + , subq_10.bookers + , subq_10.average_booking_value + , subq_10.referred_bookings + , subq_10.median_booking_value + , subq_10.booking_value_p99 + , subq_10.discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + subq_12.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_9.metric_time__day = subq_15.metric_time__day + GROUP BY + COALESCE(subq_9.metric_time__day, subq_15.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql new file mode 100644 index 0000000000..0369468e28 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql @@ -0,0 +1,83 @@ +test_name: test_nested_derived_metric_with_offset_multiple_input_metrics +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , booking_fees - booking_fees_start_of_month AS booking_fees_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_26.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , MAX(subq_26.booking_fees_start_of_month) AS booking_fees_start_of_month + , MAX(subq_31.booking_fees) AS booking_fees + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_22.booking_fees_start_of_month AS booking_fees_start_of_month + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , booking_value * 0.05 AS booking_fees_start_of_month + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(booking_value) AS booking_value + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = subq_22.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , booking_value * 0.05 AS booking_fees + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(booking_value) AS booking_value + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_26.metric_time__day = subq_31.metric_time__day + GROUP BY + COALESCE(subq_26.metric_time__day, subq_31.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql new file mode 100644 index 0000000000..ca5166a493 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql @@ -0,0 +1,236 @@ +test_name: test_nested_fill_nulls_without_time_spine +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.metric_time__day + , 3 * twice_bookings_fill_nulls_with_0_without_time_spine AS nested_fill_nulls_without_time_spine +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql new file mode 100644 index 0000000000..6ec631a763 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_nested_fill_nulls_without_time_spine +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , 3 * twice_bookings_fill_nulls_with_0_without_time_spine AS nested_fill_nulls_without_time_spine +FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql new file mode 100644 index 0000000000..f675de8600 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql @@ -0,0 +1,406 @@ +test_name: test_nested_fill_nulls_without_time_spine_multi_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_6.metric_time__day, subq_11.metric_time__day) AS metric_time__day + , MAX(subq_6.nested_fill_nulls_without_time_spine) AS nested_fill_nulls_without_time_spine + , MAX(subq_11.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.metric_time__day + , 3 * twice_bookings_fill_nulls_with_0_without_time_spine AS nested_fill_nulls_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_10.metric_time__day + , subq_10.listings + FROM ( + -- Aggregate Measures + SELECT + subq_9.metric_time__day + , SUM(subq_9.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + subq_8.metric_time__day + , subq_8.listings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.created_at__day + , subq_7.created_at__week + , subq_7.created_at__month + , subq_7.created_at__quarter + , subq_7.created_at__year + , subq_7.created_at__extract_year + , subq_7.created_at__extract_quarter + , subq_7.created_at__extract_month + , subq_7.created_at__extract_day + , subq_7.created_at__extract_dow + , subq_7.created_at__extract_doy + , subq_7.listing__ds__day + , subq_7.listing__ds__week + , subq_7.listing__ds__month + , subq_7.listing__ds__quarter + , subq_7.listing__ds__year + , subq_7.listing__ds__extract_year + , subq_7.listing__ds__extract_quarter + , subq_7.listing__ds__extract_month + , subq_7.listing__ds__extract_day + , subq_7.listing__ds__extract_dow + , subq_7.listing__ds__extract_doy + , subq_7.listing__created_at__day + , subq_7.listing__created_at__week + , subq_7.listing__created_at__month + , subq_7.listing__created_at__quarter + , subq_7.listing__created_at__year + , subq_7.listing__created_at__extract_year + , subq_7.listing__created_at__extract_quarter + , subq_7.listing__created_at__extract_month + , subq_7.listing__created_at__extract_day + , subq_7.listing__created_at__extract_dow + , subq_7.listing__created_at__extract_doy + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.listing + , subq_7.user + , subq_7.listing__user + , subq_7.country_latest + , subq_7.is_lux_latest + , subq_7.capacity_latest + , subq_7.listing__country_latest + , subq_7.listing__is_lux_latest + , subq_7.listing__capacity_latest + , subq_7.listings + , subq_7.largest_listing + , subq_7.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + subq_6.metric_time__day = subq_11.metric_time__day +GROUP BY + COALESCE(subq_6.metric_time__day, subq_11.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql new file mode 100644 index 0000000000..4e3f3ead9c --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql @@ -0,0 +1,75 @@ +test_name: test_nested_fill_nulls_without_time_spine_multi_metric +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_18.metric_time__day, subq_23.metric_time__day) AS metric_time__day + , MAX(subq_18.nested_fill_nulls_without_time_spine) AS nested_fill_nulls_without_time_spine + , MAX(subq_23.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 3 * twice_bookings_fill_nulls_with_0_without_time_spine AS nested_fill_nulls_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings_fill_nulls_with_0_without_time_spine AS twice_bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine + FROM ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +FULL OUTER JOIN +( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(listings) AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_23 +ON + subq_18.metric_time__day = subq_23.metric_time__day +GROUP BY + COALESCE(subq_18.metric_time__day, subq_23.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql new file mode 100644 index 0000000000..df7a7b0456 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql @@ -0,0 +1,1481 @@ +test_name: test_nested_filters +test_filename: test_derived_metric_rendering.py +docstring: + Tests derived metric rendering for a nested derived metric with filters on the outer metric spec. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + instant_lux_booking_value_rate AS instant_lux_booking_value_rate +FROM ( + -- Compute Metrics via Expressions + SELECT + average_booking_value * bookings / NULLIF(booking_value, 0) AS instant_lux_booking_value_rate + FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_9.average_booking_value) AS average_booking_value + , MAX(subq_19.bookings) AS bookings + , MAX(subq_25.booking_value) AS booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.average_booking_value + FROM ( + -- Aggregate Measures + SELECT + AVG(subq_7.average_booking_value) AS average_booking_value + FROM ( + -- Pass Only Elements: ['average_booking_value',] + SELECT + subq_6.average_booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__is_lux_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.is_lux_latest AS listing__is_lux_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['is_lux_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.is_lux_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE (listing__is_lux_latest) AND (booking__is_instant) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + CROSS JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_18.bookings + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_17.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_16.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.ds_partitioned__day + , subq_15.ds_partitioned__week + , subq_15.ds_partitioned__month + , subq_15.ds_partitioned__quarter + , subq_15.ds_partitioned__year + , subq_15.ds_partitioned__extract_year + , subq_15.ds_partitioned__extract_quarter + , subq_15.ds_partitioned__extract_month + , subq_15.ds_partitioned__extract_day + , subq_15.ds_partitioned__extract_dow + , subq_15.ds_partitioned__extract_doy + , subq_15.paid_at__day + , subq_15.paid_at__week + , subq_15.paid_at__month + , subq_15.paid_at__quarter + , subq_15.paid_at__year + , subq_15.paid_at__extract_year + , subq_15.paid_at__extract_quarter + , subq_15.paid_at__extract_month + , subq_15.paid_at__extract_day + , subq_15.paid_at__extract_dow + , subq_15.paid_at__extract_doy + , subq_15.booking__ds__day + , subq_15.booking__ds__week + , subq_15.booking__ds__month + , subq_15.booking__ds__quarter + , subq_15.booking__ds__year + , subq_15.booking__ds__extract_year + , subq_15.booking__ds__extract_quarter + , subq_15.booking__ds__extract_month + , subq_15.booking__ds__extract_day + , subq_15.booking__ds__extract_dow + , subq_15.booking__ds__extract_doy + , subq_15.booking__ds_partitioned__day + , subq_15.booking__ds_partitioned__week + , subq_15.booking__ds_partitioned__month + , subq_15.booking__ds_partitioned__quarter + , subq_15.booking__ds_partitioned__year + , subq_15.booking__ds_partitioned__extract_year + , subq_15.booking__ds_partitioned__extract_quarter + , subq_15.booking__ds_partitioned__extract_month + , subq_15.booking__ds_partitioned__extract_day + , subq_15.booking__ds_partitioned__extract_dow + , subq_15.booking__ds_partitioned__extract_doy + , subq_15.booking__paid_at__day + , subq_15.booking__paid_at__week + , subq_15.booking__paid_at__month + , subq_15.booking__paid_at__quarter + , subq_15.booking__paid_at__year + , subq_15.booking__paid_at__extract_year + , subq_15.booking__paid_at__extract_quarter + , subq_15.booking__paid_at__extract_month + , subq_15.booking__paid_at__extract_day + , subq_15.booking__paid_at__extract_dow + , subq_15.booking__paid_at__extract_doy + , subq_15.metric_time__day + , subq_15.metric_time__week + , subq_15.metric_time__month + , subq_15.metric_time__quarter + , subq_15.metric_time__year + , subq_15.metric_time__extract_year + , subq_15.metric_time__extract_quarter + , subq_15.metric_time__extract_month + , subq_15.metric_time__extract_day + , subq_15.metric_time__extract_dow + , subq_15.metric_time__extract_doy + , subq_15.listing + , subq_15.guest + , subq_15.host + , subq_15.booking__listing + , subq_15.booking__guest + , subq_15.booking__host + , subq_15.is_instant + , subq_15.booking__is_instant + , subq_15.listing__is_lux_latest + , subq_15.bookings + , subq_15.instant_bookings + , subq_15.booking_value + , subq_15.max_booking_value + , subq_15.min_booking_value + , subq_15.bookers + , subq_15.average_booking_value + , subq_15.referred_bookings + , subq_15.median_booking_value + , subq_15.booking_value_p99 + , subq_15.discrete_booking_value_p99 + , subq_15.approximate_continuous_booking_value_p99 + , subq_15.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_14.is_lux_latest AS listing__is_lux_latest + , subq_11.ds__day AS ds__day + , subq_11.ds__week AS ds__week + , subq_11.ds__month AS ds__month + , subq_11.ds__quarter AS ds__quarter + , subq_11.ds__year AS ds__year + , subq_11.ds__extract_year AS ds__extract_year + , subq_11.ds__extract_quarter AS ds__extract_quarter + , subq_11.ds__extract_month AS ds__extract_month + , subq_11.ds__extract_day AS ds__extract_day + , subq_11.ds__extract_dow AS ds__extract_dow + , subq_11.ds__extract_doy AS ds__extract_doy + , subq_11.ds_partitioned__day AS ds_partitioned__day + , subq_11.ds_partitioned__week AS ds_partitioned__week + , subq_11.ds_partitioned__month AS ds_partitioned__month + , subq_11.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_11.ds_partitioned__year AS ds_partitioned__year + , subq_11.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_11.paid_at__day AS paid_at__day + , subq_11.paid_at__week AS paid_at__week + , subq_11.paid_at__month AS paid_at__month + , subq_11.paid_at__quarter AS paid_at__quarter + , subq_11.paid_at__year AS paid_at__year + , subq_11.paid_at__extract_year AS paid_at__extract_year + , subq_11.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_11.paid_at__extract_month AS paid_at__extract_month + , subq_11.paid_at__extract_day AS paid_at__extract_day + , subq_11.paid_at__extract_dow AS paid_at__extract_dow + , subq_11.paid_at__extract_doy AS paid_at__extract_doy + , subq_11.booking__ds__day AS booking__ds__day + , subq_11.booking__ds__week AS booking__ds__week + , subq_11.booking__ds__month AS booking__ds__month + , subq_11.booking__ds__quarter AS booking__ds__quarter + , subq_11.booking__ds__year AS booking__ds__year + , subq_11.booking__ds__extract_year AS booking__ds__extract_year + , subq_11.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_11.booking__ds__extract_month AS booking__ds__extract_month + , subq_11.booking__ds__extract_day AS booking__ds__extract_day + , subq_11.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_11.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_11.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_11.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_11.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_11.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_11.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_11.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_11.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_11.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_11.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_11.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_11.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_11.booking__paid_at__day AS booking__paid_at__day + , subq_11.booking__paid_at__week AS booking__paid_at__week + , subq_11.booking__paid_at__month AS booking__paid_at__month + , subq_11.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_11.booking__paid_at__year AS booking__paid_at__year + , subq_11.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_11.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_11.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_11.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_11.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_11.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_11.metric_time__day AS metric_time__day + , subq_11.metric_time__week AS metric_time__week + , subq_11.metric_time__month AS metric_time__month + , subq_11.metric_time__quarter AS metric_time__quarter + , subq_11.metric_time__year AS metric_time__year + , subq_11.metric_time__extract_year AS metric_time__extract_year + , subq_11.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_11.metric_time__extract_month AS metric_time__extract_month + , subq_11.metric_time__extract_day AS metric_time__extract_day + , subq_11.metric_time__extract_dow AS metric_time__extract_dow + , subq_11.metric_time__extract_doy AS metric_time__extract_doy + , subq_11.listing AS listing + , subq_11.guest AS guest + , subq_11.host AS host + , subq_11.booking__listing AS booking__listing + , subq_11.booking__guest AS booking__guest + , subq_11.booking__host AS booking__host + , subq_11.is_instant AS is_instant + , subq_11.booking__is_instant AS booking__is_instant + , subq_11.bookings AS bookings + , subq_11.instant_bookings AS instant_bookings + , subq_11.booking_value AS booking_value + , subq_11.max_booking_value AS max_booking_value + , subq_11.min_booking_value AS min_booking_value + , subq_11.bookers AS bookers + , subq_11.average_booking_value AS average_booking_value + , subq_11.referred_bookings AS referred_bookings + , subq_11.median_booking_value AS median_booking_value + , subq_11.booking_value_p99 AS booking_value_p99 + , subq_11.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_11.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_11.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.paid_at__day + , subq_10.paid_at__week + , subq_10.paid_at__month + , subq_10.paid_at__quarter + , subq_10.paid_at__year + , subq_10.paid_at__extract_year + , subq_10.paid_at__extract_quarter + , subq_10.paid_at__extract_month + , subq_10.paid_at__extract_day + , subq_10.paid_at__extract_dow + , subq_10.paid_at__extract_doy + , subq_10.booking__ds__day + , subq_10.booking__ds__week + , subq_10.booking__ds__month + , subq_10.booking__ds__quarter + , subq_10.booking__ds__year + , subq_10.booking__ds__extract_year + , subq_10.booking__ds__extract_quarter + , subq_10.booking__ds__extract_month + , subq_10.booking__ds__extract_day + , subq_10.booking__ds__extract_dow + , subq_10.booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day + , subq_10.booking__paid_at__week + , subq_10.booking__paid_at__month + , subq_10.booking__paid_at__quarter + , subq_10.booking__paid_at__year + , subq_10.booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.guest + , subq_10.host + , subq_10.booking__listing + , subq_10.booking__guest + , subq_10.booking__host + , subq_10.is_instant + , subq_10.booking__is_instant + , subq_10.bookings + , subq_10.instant_bookings + , subq_10.booking_value + , subq_10.max_booking_value + , subq_10.min_booking_value + , subq_10.bookers + , subq_10.average_booking_value + , subq_10.referred_bookings + , subq_10.median_booking_value + , subq_10.booking_value_p99 + , subq_10.discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['is_lux_latest', 'listing'] + SELECT + subq_13.listing + , subq_13.is_lux_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.created_at__day + , subq_12.created_at__week + , subq_12.created_at__month + , subq_12.created_at__quarter + , subq_12.created_at__year + , subq_12.created_at__extract_year + , subq_12.created_at__extract_quarter + , subq_12.created_at__extract_month + , subq_12.created_at__extract_day + , subq_12.created_at__extract_dow + , subq_12.created_at__extract_doy + , subq_12.listing__ds__day + , subq_12.listing__ds__week + , subq_12.listing__ds__month + , subq_12.listing__ds__quarter + , subq_12.listing__ds__year + , subq_12.listing__ds__extract_year + , subq_12.listing__ds__extract_quarter + , subq_12.listing__ds__extract_month + , subq_12.listing__ds__extract_day + , subq_12.listing__ds__extract_dow + , subq_12.listing__ds__extract_doy + , subq_12.listing__created_at__day + , subq_12.listing__created_at__week + , subq_12.listing__created_at__month + , subq_12.listing__created_at__quarter + , subq_12.listing__created_at__year + , subq_12.listing__created_at__extract_year + , subq_12.listing__created_at__extract_quarter + , subq_12.listing__created_at__extract_month + , subq_12.listing__created_at__extract_day + , subq_12.listing__created_at__extract_dow + , subq_12.listing__created_at__extract_doy + , subq_12.ds__day AS metric_time__day + , subq_12.ds__week AS metric_time__week + , subq_12.ds__month AS metric_time__month + , subq_12.ds__quarter AS metric_time__quarter + , subq_12.ds__year AS metric_time__year + , subq_12.ds__extract_year AS metric_time__extract_year + , subq_12.ds__extract_quarter AS metric_time__extract_quarter + , subq_12.ds__extract_month AS metric_time__extract_month + , subq_12.ds__extract_day AS metric_time__extract_day + , subq_12.ds__extract_dow AS metric_time__extract_dow + , subq_12.ds__extract_doy AS metric_time__extract_doy + , subq_12.listing + , subq_12.user + , subq_12.listing__user + , subq_12.country_latest + , subq_12.is_lux_latest + , subq_12.capacity_latest + , subq_12.listing__country_latest + , subq_12.listing__is_lux_latest + , subq_12.listing__capacity_latest + , subq_12.listings + , subq_12.largest_listing + , subq_12.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + subq_11.listing = subq_14.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE (listing__is_lux_latest) AND (booking__is_instant) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + CROSS JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_24.booking_value + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_23.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value',] + SELECT + subq_22.booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_21.ds__day + , subq_21.ds__week + , subq_21.ds__month + , subq_21.ds__quarter + , subq_21.ds__year + , subq_21.ds__extract_year + , subq_21.ds__extract_quarter + , subq_21.ds__extract_month + , subq_21.ds__extract_day + , subq_21.ds__extract_dow + , subq_21.ds__extract_doy + , subq_21.ds_partitioned__day + , subq_21.ds_partitioned__week + , subq_21.ds_partitioned__month + , subq_21.ds_partitioned__quarter + , subq_21.ds_partitioned__year + , subq_21.ds_partitioned__extract_year + , subq_21.ds_partitioned__extract_quarter + , subq_21.ds_partitioned__extract_month + , subq_21.ds_partitioned__extract_day + , subq_21.ds_partitioned__extract_dow + , subq_21.ds_partitioned__extract_doy + , subq_21.paid_at__day + , subq_21.paid_at__week + , subq_21.paid_at__month + , subq_21.paid_at__quarter + , subq_21.paid_at__year + , subq_21.paid_at__extract_year + , subq_21.paid_at__extract_quarter + , subq_21.paid_at__extract_month + , subq_21.paid_at__extract_day + , subq_21.paid_at__extract_dow + , subq_21.paid_at__extract_doy + , subq_21.booking__ds__day + , subq_21.booking__ds__week + , subq_21.booking__ds__month + , subq_21.booking__ds__quarter + , subq_21.booking__ds__year + , subq_21.booking__ds__extract_year + , subq_21.booking__ds__extract_quarter + , subq_21.booking__ds__extract_month + , subq_21.booking__ds__extract_day + , subq_21.booking__ds__extract_dow + , subq_21.booking__ds__extract_doy + , subq_21.booking__ds_partitioned__day + , subq_21.booking__ds_partitioned__week + , subq_21.booking__ds_partitioned__month + , subq_21.booking__ds_partitioned__quarter + , subq_21.booking__ds_partitioned__year + , subq_21.booking__ds_partitioned__extract_year + , subq_21.booking__ds_partitioned__extract_quarter + , subq_21.booking__ds_partitioned__extract_month + , subq_21.booking__ds_partitioned__extract_day + , subq_21.booking__ds_partitioned__extract_dow + , subq_21.booking__ds_partitioned__extract_doy + , subq_21.booking__paid_at__day + , subq_21.booking__paid_at__week + , subq_21.booking__paid_at__month + , subq_21.booking__paid_at__quarter + , subq_21.booking__paid_at__year + , subq_21.booking__paid_at__extract_year + , subq_21.booking__paid_at__extract_quarter + , subq_21.booking__paid_at__extract_month + , subq_21.booking__paid_at__extract_day + , subq_21.booking__paid_at__extract_dow + , subq_21.booking__paid_at__extract_doy + , subq_21.metric_time__day + , subq_21.metric_time__week + , subq_21.metric_time__month + , subq_21.metric_time__quarter + , subq_21.metric_time__year + , subq_21.metric_time__extract_year + , subq_21.metric_time__extract_quarter + , subq_21.metric_time__extract_month + , subq_21.metric_time__extract_day + , subq_21.metric_time__extract_dow + , subq_21.metric_time__extract_doy + , subq_21.listing + , subq_21.guest + , subq_21.host + , subq_21.booking__listing + , subq_21.booking__guest + , subq_21.booking__host + , subq_21.is_instant + , subq_21.booking__is_instant + , subq_21.bookings + , subq_21.instant_bookings + , subq_21.booking_value + , subq_21.max_booking_value + , subq_21.min_booking_value + , subq_21.bookers + , subq_21.average_booking_value + , subq_21.referred_bookings + , subq_21.median_booking_value + , subq_21.booking_value_p99 + , subq_21.discrete_booking_value_p99 + , subq_21.approximate_continuous_booking_value_p99 + , subq_21.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_20.ds__day + , subq_20.ds__week + , subq_20.ds__month + , subq_20.ds__quarter + , subq_20.ds__year + , subq_20.ds__extract_year + , subq_20.ds__extract_quarter + , subq_20.ds__extract_month + , subq_20.ds__extract_day + , subq_20.ds__extract_dow + , subq_20.ds__extract_doy + , subq_20.ds_partitioned__day + , subq_20.ds_partitioned__week + , subq_20.ds_partitioned__month + , subq_20.ds_partitioned__quarter + , subq_20.ds_partitioned__year + , subq_20.ds_partitioned__extract_year + , subq_20.ds_partitioned__extract_quarter + , subq_20.ds_partitioned__extract_month + , subq_20.ds_partitioned__extract_day + , subq_20.ds_partitioned__extract_dow + , subq_20.ds_partitioned__extract_doy + , subq_20.paid_at__day + , subq_20.paid_at__week + , subq_20.paid_at__month + , subq_20.paid_at__quarter + , subq_20.paid_at__year + , subq_20.paid_at__extract_year + , subq_20.paid_at__extract_quarter + , subq_20.paid_at__extract_month + , subq_20.paid_at__extract_day + , subq_20.paid_at__extract_dow + , subq_20.paid_at__extract_doy + , subq_20.booking__ds__day + , subq_20.booking__ds__week + , subq_20.booking__ds__month + , subq_20.booking__ds__quarter + , subq_20.booking__ds__year + , subq_20.booking__ds__extract_year + , subq_20.booking__ds__extract_quarter + , subq_20.booking__ds__extract_month + , subq_20.booking__ds__extract_day + , subq_20.booking__ds__extract_dow + , subq_20.booking__ds__extract_doy + , subq_20.booking__ds_partitioned__day + , subq_20.booking__ds_partitioned__week + , subq_20.booking__ds_partitioned__month + , subq_20.booking__ds_partitioned__quarter + , subq_20.booking__ds_partitioned__year + , subq_20.booking__ds_partitioned__extract_year + , subq_20.booking__ds_partitioned__extract_quarter + , subq_20.booking__ds_partitioned__extract_month + , subq_20.booking__ds_partitioned__extract_day + , subq_20.booking__ds_partitioned__extract_dow + , subq_20.booking__ds_partitioned__extract_doy + , subq_20.booking__paid_at__day + , subq_20.booking__paid_at__week + , subq_20.booking__paid_at__month + , subq_20.booking__paid_at__quarter + , subq_20.booking__paid_at__year + , subq_20.booking__paid_at__extract_year + , subq_20.booking__paid_at__extract_quarter + , subq_20.booking__paid_at__extract_month + , subq_20.booking__paid_at__extract_day + , subq_20.booking__paid_at__extract_dow + , subq_20.booking__paid_at__extract_doy + , subq_20.ds__day AS metric_time__day + , subq_20.ds__week AS metric_time__week + , subq_20.ds__month AS metric_time__month + , subq_20.ds__quarter AS metric_time__quarter + , subq_20.ds__year AS metric_time__year + , subq_20.ds__extract_year AS metric_time__extract_year + , subq_20.ds__extract_quarter AS metric_time__extract_quarter + , subq_20.ds__extract_month AS metric_time__extract_month + , subq_20.ds__extract_day AS metric_time__extract_day + , subq_20.ds__extract_dow AS metric_time__extract_dow + , subq_20.ds__extract_doy AS metric_time__extract_doy + , subq_20.listing + , subq_20.guest + , subq_20.host + , subq_20.booking__listing + , subq_20.booking__guest + , subq_20.booking__host + , subq_20.is_instant + , subq_20.booking__is_instant + , subq_20.bookings + , subq_20.instant_bookings + , subq_20.booking_value + , subq_20.max_booking_value + , subq_20.min_booking_value + , subq_20.bookers + , subq_20.average_booking_value + , subq_20.referred_bookings + , subq_20.median_booking_value + , subq_20.booking_value_p99 + , subq_20.discrete_booking_value_p99 + , subq_20.approximate_continuous_booking_value_p99 + , subq_20.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql new file mode 100644 index 0000000000..997001190f --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql @@ -0,0 +1,79 @@ +test_name: test_nested_filters +test_filename: test_derived_metric_rendering.py +docstring: + Tests derived metric rendering for a nested derived metric with filters on the outer metric spec. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + instant_lux_booking_value_rate AS instant_lux_booking_value_rate +FROM ( + -- Compute Metrics via Expressions + SELECT + average_booking_value * bookings / NULLIF(booking_value, 0) AS instant_lux_booking_value_rate + FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_37.average_booking_value) AS average_booking_value + , MAX(subq_37.bookings) AS bookings + , MAX(subq_43.booking_value) AS booking_value + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['average_booking_value', 'bookings'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + AVG(average_booking_value) AS average_booking_value + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , subq_29.booking__is_instant AS booking__is_instant + , subq_29.bookings AS bookings + , subq_29.average_booking_value AS average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + , booking_value AS average_booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_29 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_29.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_33 + WHERE (listing__is_lux_latest) AND (booking__is_instant) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_37 + CROSS JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['booking_value',] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + SUM(booking_value) AS booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + is_instant AS booking__is_instant + , booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_39 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_43 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_44 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_45 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql new file mode 100644 index 0000000000..a4385e1c40 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql @@ -0,0 +1,434 @@ +test_name: test_nested_offsets +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_13.metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_12.metric_time__day AS metric_time__day + , subq_9.bookings_offset_once AS bookings_offset_once + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_11.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_10.ds__day AS metric_time__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_13 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql new file mode 100644 index 0000000000..4ed0d4a0b4 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql @@ -0,0 +1,60 @@ +test_name: test_nested_offsets +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_23.bookings_offset_once AS bookings_offset_once + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(subq_15.bookings) AS bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_15.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + ON + addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_23.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..7b1ea09ebc --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql @@ -0,0 +1,442 @@ +test_name: test_nested_offsets_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Constrain Time Range to [2020-01-12T00:00:00, 2020-01-13T00:00:00] + SELECT + subq_13.metric_time__day + , subq_13.bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_12.metric_time__day AS metric_time__day + , subq_9.bookings_offset_once AS bookings_offset_once + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_11.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_10.ds__day AS metric_time__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE subq_13.metric_time__day BETWEEN '2020-01-12' AND '2020-01-13' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..457a60d9e8 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,62 @@ +test_name: test_nested_offsets_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Join to Time Spine Dataset + -- Constrain Time Range to [2020-01-12T00:00:00, 2020-01-13T00:00:00] + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_24.bookings_offset_once AS bookings_offset_once + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(subq_16.bookings) AS bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + ON + addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_16.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + ON + addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_24.metric_time__day + WHERE rss_28018_cte.ds__day BETWEEN '2020-01-12' AND '2020-01-13' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_29 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql new file mode 100644 index 0000000000..e74754475a --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql @@ -0,0 +1,442 @@ +test_name: test_nested_offsets_with_where_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Constrain Output with WHERE + SELECT + subq_13.metric_time__day + , subq_13.bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_12.metric_time__day AS metric_time__day + , subq_9.bookings_offset_once AS bookings_offset_once + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_11.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_10.ds__day AS metric_time__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + ON + addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..8804985dbe --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql @@ -0,0 +1,68 @@ +test_name: test_nested_offsets_with_where_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , 2 * bookings_offset_once AS bookings_offset_twice +FROM ( + -- Constrain Output with WHERE + SELECT + metric_time__day + , bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_24.bookings_offset_once AS bookings_offset_once + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , 2 * bookings AS bookings_offset_once + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(subq_16.bookings) AS bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + ON + addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_16.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + ON + addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_24.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_29 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql new file mode 100644 index 0000000000..06a7ae8027 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_offset_to_grain_metric_filter_and_query_have_different_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset to grain metric is queried with one granularity and filtered by a different one. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__month + , bookings_start_of_month AS bookings_at_start_of_month +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__month + , subq_8.bookings AS bookings_start_of_month + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__month + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__month'] + SELECT + subq_6.metric_time__month + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__week + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__month + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__month AS metric_time__month + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__month'] + SELECT + subq_3.metric_time__day + , subq_3.metric_time__month + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__month AS metric_time__month + , subq_2.ds__week + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + WHERE subq_4.metric_time__month = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql new file mode 100644 index 0000000000..350fa6f16f --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -0,0 +1,46 @@ +test_name: test_offset_to_grain_metric_filter_and_query_have_different_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset to grain metric is queried with one granularity and filtered by a different one. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__month + , bookings_start_of_month AS bookings_at_start_of_month +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__month'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__month + , SUM(bookings) AS bookings_start_of_month + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , subq_11.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = subq_11.metric_time__day + WHERE DATE_TRUNC('month', time_spine_src_28006.ds) = time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE metric_time__day = '2020-01-01' + GROUP BY + metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql new file mode 100644 index 0000000000..1abc819838 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql @@ -0,0 +1,390 @@ +test_name: test_offset_to_grain_metric_multiple_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset to grain metric is queried with multiple granularities. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__day + , subq_8.metric_time__month + , subq_8.metric_time__year + , bookings_start_of_month AS bookings_at_start_of_month +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.metric_time__month + , subq_7.metric_time__year + , subq_7.bookings AS bookings_start_of_month + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.metric_time__year + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + SELECT + subq_5.metric_time__day + , subq_5.metric_time__month + , subq_5.metric_time__year + , subq_5.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__month AS metric_time__month + , subq_4.metric_time__year AS metric_time__year + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__month', 'metric_time__year'] + SELECT + subq_3.metric_time__day + , subq_3.metric_time__month + , subq_3.metric_time__year + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__month AS metric_time__month + , subq_2.ds__year AS metric_time__year + , subq_2.ds__week + , subq_2.ds__quarter + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql new file mode 100644 index 0000000000..1b23c7a5cc --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_offset_to_grain_metric_multiple_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset to grain metric is queried with multiple granularities. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , metric_time__month + , metric_time__year + , bookings_start_of_month AS bookings_at_start_of_month +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , DATE_TRUNC('year', time_spine_src_28006.ds) AS metric_time__year + , SUM(subq_10.bookings) AS bookings_start_of_month + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = subq_10.metric_time__day + GROUP BY + time_spine_src_28006.ds + , DATE_TRUNC('month', time_spine_src_28006.ds) + , DATE_TRUNC('year', time_spine_src_28006.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql new file mode 100644 index 0000000000..9ac5589aaf --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql @@ -0,0 +1,609 @@ +test_name: test_offset_to_grain_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.booking__ds__day + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) AS booking__ds__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.booking__ds__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.booking__ds__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + SELECT + subq_1.booking__ds__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.booking__ds__day + , subq_12.bookings AS bookings_at_start_of_month + FROM ( + -- Aggregate Measures + SELECT + subq_11.booking__ds__day + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + SELECT + subq_10.booking__ds__day + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__day AS metric_time__day + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.booking__ds__day AS booking__ds__day + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['booking__ds__day',] + SELECT + subq_8.booking__ds__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS booking__ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + DATE_TRUNC('month', subq_9.booking__ds__day) = subq_6.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.booking__ds__day = subq_13.booking__ds__day + GROUP BY + COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql new file mode 100644 index 0000000000..47913c47f3 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql @@ -0,0 +1,62 @@ +test_name: test_offset_to_grain_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS booking__ds__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + booking__ds__day AS booking__ds__day + , bookings - bookings_at_start_of_month AS bookings_growth_since_start_of_month +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) AS booking__ds__day + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_at_start_of_month) AS bookings_at_start_of_month + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + booking__ds__day + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS booking__ds__day + , SUM(sma_28009_cte.bookings) AS bookings_at_start_of_month + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.booking__ds__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.booking__ds__day = subq_27.booking__ds__day + GROUP BY + COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql new file mode 100644 index 0000000000..a7f75be920 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql @@ -0,0 +1,820 @@ +test_name: test_offset_window_metric_filter_and_query_have_different_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset window metric is queried with one granularity and filtered by a different one. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_16.metric_time__month + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_9.metric_time__month, subq_15.metric_time__month) AS metric_time__month + , MAX(subq_9.booking_value) AS booking_value + , MAX(subq_15.bookers) AS bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__month + , subq_8.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__month + , SUM(subq_7.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__month'] + SELECT + subq_6.metric_time__month + , subq_6.booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__week + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__month + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__month AS metric_time__month + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__month'] + SELECT + subq_3.metric_time__day + , subq_3.metric_time__month + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__month AS metric_time__month + , subq_2.ds__week + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addWeeks(subq_4.metric_time__day, CAST(-1 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_14.metric_time__month + , subq_14.bookers + FROM ( + -- Aggregate Measures + SELECT + subq_13.metric_time__month + , COUNT(DISTINCT subq_13.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__month'] + SELECT + subq_12.metric_time__month + , subq_12.bookers + FROM ( + -- Constrain Output with WHERE + SELECT + subq_11.ds__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds_partitioned__day + , subq_11.ds_partitioned__week + , subq_11.ds_partitioned__month + , subq_11.ds_partitioned__quarter + , subq_11.ds_partitioned__year + , subq_11.ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy + , subq_11.paid_at__day + , subq_11.paid_at__week + , subq_11.paid_at__month + , subq_11.paid_at__quarter + , subq_11.paid_at__year + , subq_11.paid_at__extract_year + , subq_11.paid_at__extract_quarter + , subq_11.paid_at__extract_month + , subq_11.paid_at__extract_day + , subq_11.paid_at__extract_dow + , subq_11.paid_at__extract_doy + , subq_11.booking__ds__day + , subq_11.booking__ds__week + , subq_11.booking__ds__month + , subq_11.booking__ds__quarter + , subq_11.booking__ds__year + , subq_11.booking__ds__extract_year + , subq_11.booking__ds__extract_quarter + , subq_11.booking__ds__extract_month + , subq_11.booking__ds__extract_day + , subq_11.booking__ds__extract_dow + , subq_11.booking__ds__extract_doy + , subq_11.booking__ds_partitioned__day + , subq_11.booking__ds_partitioned__week + , subq_11.booking__ds_partitioned__month + , subq_11.booking__ds_partitioned__quarter + , subq_11.booking__ds_partitioned__year + , subq_11.booking__ds_partitioned__extract_year + , subq_11.booking__ds_partitioned__extract_quarter + , subq_11.booking__ds_partitioned__extract_month + , subq_11.booking__ds_partitioned__extract_day + , subq_11.booking__ds_partitioned__extract_dow + , subq_11.booking__ds_partitioned__extract_doy + , subq_11.booking__paid_at__day + , subq_11.booking__paid_at__week + , subq_11.booking__paid_at__month + , subq_11.booking__paid_at__quarter + , subq_11.booking__paid_at__year + , subq_11.booking__paid_at__extract_year + , subq_11.booking__paid_at__extract_quarter + , subq_11.booking__paid_at__extract_month + , subq_11.booking__paid_at__extract_day + , subq_11.booking__paid_at__extract_dow + , subq_11.booking__paid_at__extract_doy + , subq_11.metric_time__day + , subq_11.metric_time__week + , subq_11.metric_time__month + , subq_11.metric_time__quarter + , subq_11.metric_time__year + , subq_11.metric_time__extract_year + , subq_11.metric_time__extract_quarter + , subq_11.metric_time__extract_month + , subq_11.metric_time__extract_day + , subq_11.metric_time__extract_dow + , subq_11.metric_time__extract_doy + , subq_11.listing + , subq_11.guest + , subq_11.host + , subq_11.booking__listing + , subq_11.booking__guest + , subq_11.booking__host + , subq_11.is_instant + , subq_11.booking__is_instant + , subq_11.bookings + , subq_11.instant_bookings + , subq_11.booking_value + , subq_11.max_booking_value + , subq_11.min_booking_value + , subq_11.bookers + , subq_11.average_booking_value + , subq_11.referred_bookings + , subq_11.median_booking_value + , subq_11.booking_value_p99 + , subq_11.discrete_booking_value_p99 + , subq_11.approximate_continuous_booking_value_p99 + , subq_11.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.paid_at__day + , subq_10.paid_at__week + , subq_10.paid_at__month + , subq_10.paid_at__quarter + , subq_10.paid_at__year + , subq_10.paid_at__extract_year + , subq_10.paid_at__extract_quarter + , subq_10.paid_at__extract_month + , subq_10.paid_at__extract_day + , subq_10.paid_at__extract_dow + , subq_10.paid_at__extract_doy + , subq_10.booking__ds__day + , subq_10.booking__ds__week + , subq_10.booking__ds__month + , subq_10.booking__ds__quarter + , subq_10.booking__ds__year + , subq_10.booking__ds__extract_year + , subq_10.booking__ds__extract_quarter + , subq_10.booking__ds__extract_month + , subq_10.booking__ds__extract_day + , subq_10.booking__ds__extract_dow + , subq_10.booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day + , subq_10.booking__paid_at__week + , subq_10.booking__paid_at__month + , subq_10.booking__paid_at__quarter + , subq_10.booking__paid_at__year + , subq_10.booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.guest + , subq_10.host + , subq_10.booking__listing + , subq_10.booking__guest + , subq_10.booking__host + , subq_10.is_instant + , subq_10.booking__is_instant + , subq_10.bookings + , subq_10.instant_bookings + , subq_10.booking_value + , subq_10.max_booking_value + , subq_10.min_booking_value + , subq_10.bookers + , subq_10.average_booking_value + , subq_10.referred_bookings + , subq_10.median_booking_value + , subq_10.booking_value_p99 + , subq_10.discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE metric_time__day = '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + GROUP BY + subq_13.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_9.metric_time__month = subq_15.metric_time__month + GROUP BY + COALESCE(subq_9.metric_time__month, subq_15.metric_time__month) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql new file mode 100644 index 0000000000..ee52104133 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -0,0 +1,85 @@ +test_name: test_offset_window_metric_filter_and_query_have_different_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset window metric is queried with one granularity and filtered by a different one. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , booking_value + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__month AS metric_time__month + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_26.metric_time__month, subq_31.metric_time__month) AS metric_time__month + , MAX(subq_26.booking_value) AS booking_value + , MAX(subq_31.bookers) AS bookers + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['booking_value', 'metric_time__month'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__month + , SUM(booking_value) AS booking_value + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , sma_28009_cte.booking_value AS booking_value + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + WHERE metric_time__day = '2020-01-01' + GROUP BY + metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + FULL OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookers', 'metric_time__month'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__month + , COUNT(DISTINCT bookers) AS bookers + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + metric_time__day + , metric_time__month + , booking_value + , bookers + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + WHERE metric_time__day = '2020-01-01' + GROUP BY + metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + subq_26.metric_time__month = subq_31.metric_time__month + GROUP BY + COALESCE(subq_26.metric_time__month, subq_31.metric_time__month) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql new file mode 100644 index 0000000000..6a79859d49 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql @@ -0,0 +1,641 @@ +test_name: test_offset_window_metric_multiple_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset window metric is queried with multiple granularities. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__day + , subq_14.metric_time__month + , subq_14.metric_time__year + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.metric_time__day, subq_13.metric_time__day) AS metric_time__day + , COALESCE(subq_8.metric_time__month, subq_13.metric_time__month) AS metric_time__month + , COALESCE(subq_8.metric_time__year, subq_13.metric_time__year) AS metric_time__year + , MAX(subq_8.booking_value) AS booking_value + , MAX(subq_13.bookers) AS bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , subq_7.metric_time__month + , subq_7.metric_time__year + , subq_7.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.metric_time__year + , SUM(subq_6.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + SELECT + subq_5.metric_time__day + , subq_5.metric_time__month + , subq_5.metric_time__year + , subq_5.booking_value + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__month AS metric_time__month + , subq_4.metric_time__year AS metric_time__year + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__month', 'metric_time__year'] + SELECT + subq_3.metric_time__day + , subq_3.metric_time__month + , subq_3.metric_time__year + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__month AS metric_time__month + , subq_2.ds__year AS metric_time__year + , subq_2.ds__week + , subq_2.ds__quarter + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addWeeks(subq_4.metric_time__day, CAST(-1 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + , subq_6.metric_time__month + , subq_6.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__day + , subq_12.metric_time__month + , subq_12.metric_time__year + , subq_12.bookers + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__day + , subq_11.metric_time__month + , subq_11.metric_time__year + , COUNT(DISTINCT subq_11.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + SELECT + subq_10.metric_time__day + , subq_10.metric_time__month + , subq_10.metric_time__year + , subq_10.bookers + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.paid_at__day + , subq_9.paid_at__week + , subq_9.paid_at__month + , subq_9.paid_at__quarter + , subq_9.paid_at__year + , subq_9.paid_at__extract_year + , subq_9.paid_at__extract_quarter + , subq_9.paid_at__extract_month + , subq_9.paid_at__extract_day + , subq_9.paid_at__extract_dow + , subq_9.paid_at__extract_doy + , subq_9.booking__ds__day + , subq_9.booking__ds__week + , subq_9.booking__ds__month + , subq_9.booking__ds__quarter + , subq_9.booking__ds__year + , subq_9.booking__ds__extract_year + , subq_9.booking__ds__extract_quarter + , subq_9.booking__ds__extract_month + , subq_9.booking__ds__extract_day + , subq_9.booking__ds__extract_dow + , subq_9.booking__ds__extract_doy + , subq_9.booking__ds_partitioned__day + , subq_9.booking__ds_partitioned__week + , subq_9.booking__ds_partitioned__month + , subq_9.booking__ds_partitioned__quarter + , subq_9.booking__ds_partitioned__year + , subq_9.booking__ds_partitioned__extract_year + , subq_9.booking__ds_partitioned__extract_quarter + , subq_9.booking__ds_partitioned__extract_month + , subq_9.booking__ds_partitioned__extract_day + , subq_9.booking__ds_partitioned__extract_dow + , subq_9.booking__ds_partitioned__extract_doy + , subq_9.booking__paid_at__day + , subq_9.booking__paid_at__week + , subq_9.booking__paid_at__month + , subq_9.booking__paid_at__quarter + , subq_9.booking__paid_at__year + , subq_9.booking__paid_at__extract_year + , subq_9.booking__paid_at__extract_quarter + , subq_9.booking__paid_at__extract_month + , subq_9.booking__paid_at__extract_day + , subq_9.booking__paid_at__extract_dow + , subq_9.booking__paid_at__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.guest + , subq_9.host + , subq_9.booking__listing + , subq_9.booking__guest + , subq_9.booking__host + , subq_9.is_instant + , subq_9.booking__is_instant + , subq_9.bookings + , subq_9.instant_bookings + , subq_9.booking_value + , subq_9.max_booking_value + , subq_9.min_booking_value + , subq_9.bookers + , subq_9.average_booking_value + , subq_9.referred_bookings + , subq_9.median_booking_value + , subq_9.booking_value_p99 + , subq_9.discrete_booking_value_p99 + , subq_9.approximate_continuous_booking_value_p99 + , subq_9.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__day + , subq_11.metric_time__month + , subq_11.metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + ( + subq_8.metric_time__day = subq_13.metric_time__day + ) AND ( + subq_8.metric_time__month = subq_13.metric_time__month + ) AND ( + subq_8.metric_time__year = subq_13.metric_time__year + ) + GROUP BY + COALESCE(subq_8.metric_time__day, subq_13.metric_time__day) + , COALESCE(subq_8.metric_time__month, subq_13.metric_time__month) + , COALESCE(subq_8.metric_time__year, subq_13.metric_time__year) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql new file mode 100644 index 0000000000..00abda1b78 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql @@ -0,0 +1,87 @@ +test_name: test_offset_window_metric_multiple_granularities +test_filename: test_derived_metric_rendering.py +docstring: + Test a query where an offset window metric is queried with multiple granularities. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , DATE_TRUNC('year', ds) AS metric_time__year + , booking_value + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , metric_time__month AS metric_time__month + , metric_time__year AS metric_time__year + , booking_value * 0.05 / bookers AS booking_fees_last_week_per_booker_this_week +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_23.metric_time__day, subq_27.metric_time__day) AS metric_time__day + , COALESCE(subq_23.metric_time__month, subq_27.metric_time__month) AS metric_time__month + , COALESCE(subq_23.metric_time__year, subq_27.metric_time__year) AS metric_time__year + , MAX(subq_23.booking_value) AS booking_value + , MAX(subq_27.bookers) AS bookers + FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['booking_value', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , DATE_TRUNC('year', time_spine_src_28006.ds) AS metric_time__year + , SUM(sma_28009_cte.booking_value) AS booking_value + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + time_spine_src_28006.ds + , DATE_TRUNC('month', time_spine_src_28006.ds) + , DATE_TRUNC('year', time_spine_src_28006.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + FULL OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookers', 'metric_time__day', 'metric_time__month', 'metric_time__year'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , metric_time__month + , metric_time__year + , COUNT(DISTINCT bookers) AS bookers + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + , metric_time__month + , metric_time__year + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + ( + subq_23.metric_time__day = subq_27.metric_time__day + ) AND ( + subq_23.metric_time__month = subq_27.metric_time__month + ) AND ( + subq_23.metric_time__year = subq_27.metric_time__year + ) + GROUP BY + COALESCE(subq_23.metric_time__day, subq_27.metric_time__day) + , COALESCE(subq_23.metric_time__month, subq_27.metric_time__month) + , COALESCE(subq_23.metric_time__year, subq_27.metric_time__year) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql new file mode 100644 index 0000000000..fa376aa49d --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql @@ -0,0 +1,609 @@ +test_name: test_offset_window_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.booking__ds__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) AS booking__ds__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.booking__ds__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.booking__ds__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + SELECT + subq_1.booking__ds__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.booking__ds__day + , subq_12.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_11.booking__ds__day + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + SELECT + subq_10.booking__ds__day + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__day AS metric_time__day + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.booking__ds__day AS booking__ds__day + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['booking__ds__day',] + SELECT + subq_8.booking__ds__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS booking__ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + addDays(subq_9.booking__ds__day, CAST(-14 AS Integer)) = subq_6.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.booking__ds__day = subq_13.booking__ds__day + GROUP BY + COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql new file mode 100644 index 0000000000..0b3dbd2069 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql @@ -0,0 +1,62 @@ +test_name: test_offset_window_with_agg_time_dim +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS booking__ds__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + booking__ds__day AS booking__ds__day + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) AS booking__ds__day + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + booking__ds__day + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS booking__ds__day + , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.booking__ds__day + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.booking__ds__day = subq_27.booking__ds__day + GROUP BY + COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..90b9390431 --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql @@ -0,0 +1,480 @@ +test_name: test_time_offset_metric_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.bookings AS bookings_5_days_ago + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.bookings + FROM ( + -- Constrain Time Range to [2019-12-19T00:00:00, 2020-01-02T00:00:00] + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.metric_time__day + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_3.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_2.ds__day AS metric_time__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE subq_5.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..128c6aef4c --- /dev/null +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,36 @@ +test_name: test_time_offset_metric_with_time_constraint +test_filename: test_derived_metric_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , bookings_5_days_ago AS bookings_5_day_lag +FROM ( + -- Join to Time Spine Dataset + -- Constrain Time Range to [2019-12-19T00:00:00, 2020-01-02T00:00:00] + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28006.ds AS metric_time__day + , SUM(subq_11.bookings) AS bookings_5_days_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_11.metric_time__day + WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' + GROUP BY + time_spine_src_28006.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql new file mode 100644 index 0000000000..f20e88632d --- /dev/null +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql @@ -0,0 +1,242 @@ +test_name: test_dimension_values_with_a_join_and_a_filter +test_filename: test_distinct_values_to_sql.py +docstring: + Tests querying 2 dimensions that require a join and a filter. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + subq_4.listing__is_lux_latest + , subq_4.user__home_state_latest +FROM ( + -- Constrain Output with WHERE + SELECT + subq_3.ds__day + , subq_3.ds__week + , subq_3.ds__month + , subq_3.ds__quarter + , subq_3.ds__year + , subq_3.ds__extract_year + , subq_3.ds__extract_quarter + , subq_3.ds__extract_month + , subq_3.ds__extract_day + , subq_3.ds__extract_dow + , subq_3.ds__extract_doy + , subq_3.created_at__day + , subq_3.created_at__week + , subq_3.created_at__month + , subq_3.created_at__quarter + , subq_3.created_at__year + , subq_3.created_at__extract_year + , subq_3.created_at__extract_quarter + , subq_3.created_at__extract_month + , subq_3.created_at__extract_day + , subq_3.created_at__extract_dow + , subq_3.created_at__extract_doy + , subq_3.listing__ds__day + , subq_3.listing__ds__week + , subq_3.listing__ds__month + , subq_3.listing__ds__quarter + , subq_3.listing__ds__year + , subq_3.listing__ds__extract_year + , subq_3.listing__ds__extract_quarter + , subq_3.listing__ds__extract_month + , subq_3.listing__ds__extract_day + , subq_3.listing__ds__extract_dow + , subq_3.listing__ds__extract_doy + , subq_3.listing__created_at__day + , subq_3.listing__created_at__week + , subq_3.listing__created_at__month + , subq_3.listing__created_at__quarter + , subq_3.listing__created_at__year + , subq_3.listing__created_at__extract_year + , subq_3.listing__created_at__extract_quarter + , subq_3.listing__created_at__extract_month + , subq_3.listing__created_at__extract_day + , subq_3.listing__created_at__extract_dow + , subq_3.listing__created_at__extract_doy + , subq_3.listing + , subq_3.user + , subq_3.listing__user + , subq_3.country_latest + , subq_3.is_lux_latest + , subq_3.capacity_latest + , subq_3.listing__country_latest + , subq_3.listing__is_lux_latest + , subq_3.listing__capacity_latest + , subq_3.user__home_state_latest + , subq_3.listings + , subq_3.largest_listing + , subq_3.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_2.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_1.user + , subq_1.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + ON + subq_0.user = subq_2.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + WHERE user__home_state_latest = 'us' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +GROUP BY + subq_4.listing__is_lux_latest + , subq_4.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql new file mode 100644 index 0000000000..1fb2b86666 --- /dev/null +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_dimension_values_with_a_join_and_a_filter +test_filename: test_distinct_values_to_sql.py +docstring: + Tests querying 2 dimensions that require a join and a filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + listing__is_lux_latest + , user__home_state_latest +FROM ( + -- Join Standard Outputs + SELECT + users_latest_src_28000.home_state_latest AS user__home_state_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 + ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +WHERE user__home_state_latest = 'us' +GROUP BY + listing__is_lux_latest + , user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql new file mode 100644 index 0000000000..b2b8793552 --- /dev/null +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql @@ -0,0 +1,179 @@ +test_name: test_dimensions_requiring_join +test_filename: test_distinct_values_to_sql.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + subq_3.listing__is_lux_latest + , subq_3.user__home_state_latest +FROM ( + -- Join Standard Outputs + SELECT + subq_2.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_1.user + , subq_1.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + ON + subq_0.user = subq_2.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +GROUP BY + subq_3.listing__is_lux_latest + , subq_3.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql new file mode 100644 index 0000000000..25f8fead6f --- /dev/null +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql @@ -0,0 +1,20 @@ +test_name: test_dimensions_requiring_join +test_filename: test_distinct_values_to_sql.py +docstring: + Tests querying 2 dimensions that require a join. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest'] +SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , users_latest_src_28000.home_state_latest AS user__home_state_latest +FROM ***************************.dim_listings_latest listings_latest_src_28000 +FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 +ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id +GROUP BY + listings_latest_src_28000.is_lux + , users_latest_src_28000.home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql new file mode 100644 index 0000000000..f32ff337a4 --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_add_time_expr +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the SqlAddTimeExpr in a query. +sql_engine: Clickhouse +--- +-- Test Add Time Expression +SELECT + addMonths('2020-01-01', CAST((1) AS Integer)) AS add_time +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql new file mode 100644 index 0000000000..1c7ecc7adc --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_approximate_continuous_percentile_expr +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the approximate continuous percentile expression in a query. +sql_engine: Clickhouse +--- +-- Test Approximate Continuous Percentile Expression +SELECT + quantile(0.5)(a.col0) AS col0_percentile +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql new file mode 100644 index 0000000000..4a5ae5e2c0 --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_cast_to_timestamp +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the cast to timestamp expression in a query. +sql_engine: Clickhouse +--- +-- Test Cast to Timestamp Expression +SELECT + CAST('2020-01-01' AS TIMESTAMP) AS col0 +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql new file mode 100644 index 0000000000..7159152563 --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_continuous_percentile_expr +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the continuous percentile expression in a query. +sql_engine: Clickhouse +--- +-- Test Continuous Percentile Expression +SELECT + quantile(0.5)(a.col0) AS col0_percentile +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql new file mode 100644 index 0000000000..be9a1256f5 --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_discrete_percentile_expr +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the discrete percentile expression in a query. +sql_engine: Clickhouse +--- +-- Test Discrete Percentile Expression +SELECT + quantileExact(0.5)(a.col0) AS col0_percentile +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql new file mode 100644 index 0000000000..1a0fb11e77 --- /dev/null +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_generate_uuid +test_filename: test_engine_specific_rendering.py +docstring: + Tests rendering of the generate uuid expression in a query. +sql_engine: Clickhouse +--- +-- Test Generate UUID Expression +SELECT + generateUUIDv4() AS uuid +FROM foo.bar a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt new file mode 100644 index 0000000000..7fc52da634 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt @@ -0,0 +1,11 @@ +test_name: test_fill_nulls_with_0_multi_metric_query +test_filename: test_fill_nulls_with_0.py +--- +metric_time__week bookings_fill_nulls_with_0 views +------------------- ---------------------------- ------- +2019-11-25T00:00:00 1 0 +2019-12-02T00:00:00 0 0 +2019-12-09T00:00:00 0 0 +2019-12-16T00:00:00 30 0 +2019-12-23T00:00:00 0 0 +2019-12-30T00:00:00 15 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt new file mode 100644 index 0000000000..c7d698f00e --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt @@ -0,0 +1,17 @@ +test_name: test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day listing__is_lux_latest bookings_fill_nulls_with_0_without_time_spine views +------------------- ------------------------ ----------------------------------------------- ------- +1970-01-01T00:00:00 False 0 1 +2019-12-01T00:00:00 True 1 0 +2019-12-18T00:00:00 False 4 0 +2019-12-18T00:00:00 True 6 0 +2019-12-19T00:00:00 False 12 0 +2019-12-19T00:00:00 True 6 0 +2019-12-20T00:00:00 True 2 0 +2020-01-01T00:00:00 False 2 0 +2020-01-01T00:00:00 True 3 2 +2020-01-02T00:00:00 False 6 4 +2020-01-02T00:00:00 True 3 1 +2020-01-03T00:00:00 True 1 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt new file mode 100644 index 0000000000..1cea5bb1c6 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt @@ -0,0 +1,20 @@ +test_name: test_join_to_time_spine_with_custom_grain_in_group_by +test_filename: test_fill_nulls_with_0.py +--- +booking__ds__martian_day bookings_join_to_time_spine +-------------------------- ----------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 0 +2020-01-03T00:00:00 0 +2020-01-04T00:00:00 0 +2020-01-05T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 0 +2020-01-08T00:00:00 46 +2020-01-09T00:00:00 0 +2020-01-10T00:00:00 0 +2020-01-11T00:00:00 0 +2020-01-12T00:00:00 0 +2020-01-13T00:00:00 0 +2020-01-14T00:00:00 0 +2020-01-15T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt new file mode 100644 index 0000000000..9a7fd2973f --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt @@ -0,0 +1,7 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day bookings_join_to_time_spine_with_tiered_filters +------------------- ------------------------------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt new file mode 100644 index 0000000000..4a8092fde1 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt @@ -0,0 +1,7 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time +test_filename: test_fill_nulls_with_0.py +--- +booking__ds__day bookings_join_to_time_spine_with_tiered_filters +------------------- ------------------------------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt new file mode 100644 index 0000000000..63afdee818 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt @@ -0,0 +1,7 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day bookings_join_to_time_spine_with_tiered_filters +------------------- ------------------------------------------------- +2020-01-01T00:00:00 0 +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__query_output.txt new file mode 100644 index 0000000000..a8724f2db2 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__query_output.txt @@ -0,0 +1,6 @@ +test_name: test_join_to_time_spine_with_filter_smaller_than_group_by +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day archived_users_join_to_time_spine +------------------- ----------------------------------- +2020-01-01T00:00:00 12 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__query_output.txt new file mode 100644 index 0000000000..1363607ee0 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__query_output.txt @@ -0,0 +1,6 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter +test_filename: test_fill_nulls_with_0.py +--- +metric_time__martian_day bookings_join_to_time_spine +-------------------------- ----------------------------- +2020-01-08T00:00:00 46 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt new file mode 100644 index 0000000000..078f66e0c5 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt @@ -0,0 +1,1005 @@ +test_name: test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day bookings_join_to_time_spine +------------------- ----------------------------- +2019-03-02T00:00:00 0 +2019-03-03T00:00:00 0 +2019-03-04T00:00:00 0 +2019-03-05T00:00:00 0 +2019-03-06T00:00:00 0 +2019-03-07T00:00:00 0 +2019-03-08T00:00:00 0 +2019-03-09T00:00:00 0 +2019-03-10T00:00:00 0 +2019-03-11T00:00:00 0 +2019-03-12T00:00:00 0 +2019-03-13T00:00:00 0 +2019-03-14T00:00:00 0 +2019-03-15T00:00:00 0 +2019-03-16T00:00:00 0 +2019-03-17T00:00:00 0 +2019-03-18T00:00:00 0 +2019-03-19T00:00:00 0 +2019-03-20T00:00:00 0 +2019-03-21T00:00:00 0 +2019-03-22T00:00:00 0 +2019-03-23T00:00:00 0 +2019-03-24T00:00:00 0 +2019-03-25T00:00:00 0 +2019-03-26T00:00:00 0 +2019-03-27T00:00:00 0 +2019-03-28T00:00:00 0 +2019-03-29T00:00:00 0 +2019-03-30T00:00:00 0 +2019-03-31T00:00:00 0 +2019-04-01T00:00:00 0 +2019-04-02T00:00:00 0 +2019-04-03T00:00:00 0 +2019-04-04T00:00:00 0 +2019-04-05T00:00:00 0 +2019-04-06T00:00:00 0 +2019-04-07T00:00:00 0 +2019-04-08T00:00:00 0 +2019-04-09T00:00:00 0 +2019-04-10T00:00:00 0 +2019-04-11T00:00:00 0 +2019-04-12T00:00:00 0 +2019-04-13T00:00:00 0 +2019-04-14T00:00:00 0 +2019-04-15T00:00:00 0 +2019-04-16T00:00:00 0 +2019-04-17T00:00:00 0 +2019-04-18T00:00:00 0 +2019-04-19T00:00:00 0 +2019-04-20T00:00:00 0 +2019-04-21T00:00:00 0 +2019-04-22T00:00:00 0 +2019-04-23T00:00:00 0 +2019-04-24T00:00:00 0 +2019-04-25T00:00:00 0 +2019-04-26T00:00:00 0 +2019-04-27T00:00:00 0 +2019-04-28T00:00:00 0 +2019-04-29T00:00:00 0 +2019-04-30T00:00:00 0 +2019-05-01T00:00:00 0 +2019-05-02T00:00:00 0 +2019-05-03T00:00:00 0 +2019-05-04T00:00:00 0 +2019-05-05T00:00:00 0 +2019-05-06T00:00:00 0 +2019-05-07T00:00:00 0 +2019-05-08T00:00:00 0 +2019-05-09T00:00:00 0 +2019-05-10T00:00:00 0 +2019-05-11T00:00:00 0 +2019-05-12T00:00:00 0 +2019-05-13T00:00:00 0 +2019-05-14T00:00:00 0 +2019-05-15T00:00:00 0 +2019-05-16T00:00:00 0 +2019-05-17T00:00:00 0 +2019-05-18T00:00:00 0 +2019-05-19T00:00:00 0 +2019-05-20T00:00:00 0 +2019-05-21T00:00:00 0 +2019-05-22T00:00:00 0 +2019-05-23T00:00:00 0 +2019-05-24T00:00:00 0 +2019-05-25T00:00:00 0 +2019-05-26T00:00:00 0 +2019-05-27T00:00:00 0 +2019-05-28T00:00:00 0 +2019-05-29T00:00:00 0 +2019-05-30T00:00:00 0 +2019-05-31T00:00:00 0 +2019-06-01T00:00:00 0 +2019-06-02T00:00:00 0 +2019-06-03T00:00:00 0 +2019-06-04T00:00:00 0 +2019-06-05T00:00:00 0 +2019-06-06T00:00:00 0 +2019-06-07T00:00:00 0 +2019-06-08T00:00:00 0 +2019-06-09T00:00:00 0 +2019-06-10T00:00:00 0 +2019-06-11T00:00:00 0 +2019-06-12T00:00:00 0 +2019-06-13T00:00:00 0 +2019-06-14T00:00:00 0 +2019-06-15T00:00:00 0 +2019-06-16T00:00:00 0 +2019-06-17T00:00:00 0 +2019-06-18T00:00:00 0 +2019-06-19T00:00:00 0 +2019-06-20T00:00:00 0 +2019-06-21T00:00:00 0 +2019-06-22T00:00:00 0 +2019-06-23T00:00:00 0 +2019-06-24T00:00:00 0 +2019-06-25T00:00:00 0 +2019-06-26T00:00:00 0 +2019-06-27T00:00:00 0 +2019-06-28T00:00:00 0 +2019-06-29T00:00:00 0 +2019-06-30T00:00:00 0 +2019-07-01T00:00:00 0 +2019-07-02T00:00:00 0 +2019-07-03T00:00:00 0 +2019-07-04T00:00:00 0 +2019-07-05T00:00:00 0 +2019-07-06T00:00:00 0 +2019-07-07T00:00:00 0 +2019-07-08T00:00:00 0 +2019-07-09T00:00:00 0 +2019-07-10T00:00:00 0 +2019-07-11T00:00:00 0 +2019-07-12T00:00:00 0 +2019-07-13T00:00:00 0 +2019-07-14T00:00:00 0 +2019-07-15T00:00:00 0 +2019-07-16T00:00:00 0 +2019-07-17T00:00:00 0 +2019-07-18T00:00:00 0 +2019-07-19T00:00:00 0 +2019-07-20T00:00:00 0 +2019-07-21T00:00:00 0 +2019-07-22T00:00:00 0 +2019-07-23T00:00:00 0 +2019-07-24T00:00:00 0 +2019-07-25T00:00:00 0 +2019-07-26T00:00:00 0 +2019-07-27T00:00:00 0 +2019-07-28T00:00:00 0 +2019-07-29T00:00:00 0 +2019-07-30T00:00:00 0 +2019-07-31T00:00:00 0 +2019-08-01T00:00:00 0 +2019-08-02T00:00:00 0 +2019-08-03T00:00:00 0 +2019-08-04T00:00:00 0 +2019-08-05T00:00:00 0 +2019-08-06T00:00:00 0 +2019-08-07T00:00:00 0 +2019-08-08T00:00:00 0 +2019-08-09T00:00:00 0 +2019-08-10T00:00:00 0 +2019-08-11T00:00:00 0 +2019-08-12T00:00:00 0 +2019-08-13T00:00:00 0 +2019-08-14T00:00:00 0 +2019-08-15T00:00:00 0 +2019-08-16T00:00:00 0 +2019-08-17T00:00:00 0 +2019-08-18T00:00:00 0 +2019-08-19T00:00:00 0 +2019-08-20T00:00:00 0 +2019-08-21T00:00:00 0 +2019-08-22T00:00:00 0 +2019-08-23T00:00:00 0 +2019-08-24T00:00:00 0 +2019-08-25T00:00:00 0 +2019-08-26T00:00:00 0 +2019-08-27T00:00:00 0 +2019-08-28T00:00:00 0 +2019-08-29T00:00:00 0 +2019-08-30T00:00:00 0 +2019-08-31T00:00:00 0 +2019-09-01T00:00:00 0 +2019-09-02T00:00:00 0 +2019-09-03T00:00:00 0 +2019-09-04T00:00:00 0 +2019-09-05T00:00:00 0 +2019-09-06T00:00:00 0 +2019-09-07T00:00:00 0 +2019-09-08T00:00:00 0 +2019-09-09T00:00:00 0 +2019-09-10T00:00:00 0 +2019-09-11T00:00:00 0 +2019-09-12T00:00:00 0 +2019-09-13T00:00:00 0 +2019-09-14T00:00:00 0 +2019-09-15T00:00:00 0 +2019-09-16T00:00:00 0 +2019-09-17T00:00:00 0 +2019-09-18T00:00:00 0 +2019-09-19T00:00:00 0 +2019-09-20T00:00:00 0 +2019-09-21T00:00:00 0 +2019-09-22T00:00:00 0 +2019-09-23T00:00:00 0 +2019-09-24T00:00:00 0 +2019-09-25T00:00:00 0 +2019-09-26T00:00:00 0 +2019-09-27T00:00:00 0 +2019-09-28T00:00:00 0 +2019-09-29T00:00:00 0 +2019-09-30T00:00:00 0 +2019-10-01T00:00:00 0 +2019-10-02T00:00:00 0 +2019-10-03T00:00:00 0 +2019-10-04T00:00:00 0 +2019-10-05T00:00:00 0 +2019-10-06T00:00:00 0 +2019-10-07T00:00:00 0 +2019-10-08T00:00:00 0 +2019-10-09T00:00:00 0 +2019-10-10T00:00:00 0 +2019-10-11T00:00:00 0 +2019-10-12T00:00:00 0 +2019-10-13T00:00:00 0 +2019-10-14T00:00:00 0 +2019-10-15T00:00:00 0 +2019-10-16T00:00:00 0 +2019-10-17T00:00:00 0 +2019-10-18T00:00:00 0 +2019-10-19T00:00:00 0 +2019-10-20T00:00:00 0 +2019-10-21T00:00:00 0 +2019-10-22T00:00:00 0 +2019-10-23T00:00:00 0 +2019-10-24T00:00:00 0 +2019-10-25T00:00:00 0 +2019-10-26T00:00:00 0 +2019-10-27T00:00:00 0 +2019-10-28T00:00:00 0 +2019-10-29T00:00:00 0 +2019-10-30T00:00:00 0 +2019-10-31T00:00:00 0 +2019-11-01T00:00:00 0 +2019-11-02T00:00:00 0 +2019-11-03T00:00:00 0 +2019-11-04T00:00:00 0 +2019-11-05T00:00:00 0 +2019-11-06T00:00:00 0 +2019-11-07T00:00:00 0 +2019-11-08T00:00:00 0 +2019-11-09T00:00:00 0 +2019-11-10T00:00:00 0 +2019-11-11T00:00:00 0 +2019-11-12T00:00:00 0 +2019-11-13T00:00:00 0 +2019-11-14T00:00:00 0 +2019-11-15T00:00:00 0 +2019-11-16T00:00:00 0 +2019-11-17T00:00:00 0 +2019-11-18T00:00:00 0 +2019-11-19T00:00:00 0 +2019-11-20T00:00:00 0 +2019-11-21T00:00:00 0 +2019-11-22T00:00:00 0 +2019-11-23T00:00:00 0 +2019-11-24T00:00:00 0 +2019-11-25T00:00:00 0 +2019-11-26T00:00:00 0 +2019-11-27T00:00:00 0 +2019-11-28T00:00:00 0 +2019-11-29T00:00:00 0 +2019-11-30T00:00:00 0 +2019-12-01T00:00:00 1 +2019-12-02T00:00:00 0 +2019-12-03T00:00:00 0 +2019-12-04T00:00:00 0 +2019-12-05T00:00:00 0 +2019-12-06T00:00:00 0 +2019-12-07T00:00:00 0 +2019-12-08T00:00:00 0 +2019-12-09T00:00:00 0 +2019-12-10T00:00:00 0 +2019-12-11T00:00:00 0 +2019-12-12T00:00:00 0 +2019-12-13T00:00:00 0 +2019-12-14T00:00:00 0 +2019-12-15T00:00:00 0 +2019-12-16T00:00:00 0 +2019-12-17T00:00:00 0 +2019-12-18T00:00:00 10 +2019-12-19T00:00:00 18 +2019-12-20T00:00:00 2 +2019-12-21T00:00:00 0 +2019-12-22T00:00:00 0 +2019-12-23T00:00:00 0 +2019-12-24T00:00:00 0 +2019-12-25T00:00:00 0 +2019-12-26T00:00:00 0 +2019-12-27T00:00:00 0 +2019-12-28T00:00:00 0 +2019-12-29T00:00:00 0 +2019-12-30T00:00:00 0 +2019-12-31T00:00:00 0 +2020-01-01T00:00:00 5 +2020-01-02T00:00:00 9 +2020-01-03T00:00:00 1 +2020-01-04T00:00:00 0 +2020-01-05T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 0 +2020-01-08T00:00:00 0 +2020-01-09T00:00:00 0 +2020-01-10T00:00:00 0 +2020-01-11T00:00:00 0 +2020-01-12T00:00:00 0 +2020-01-13T00:00:00 0 +2020-01-14T00:00:00 0 +2020-01-15T00:00:00 0 +2020-01-16T00:00:00 0 +2020-01-17T00:00:00 0 +2020-01-18T00:00:00 0 +2020-01-19T00:00:00 0 +2020-01-20T00:00:00 0 +2020-01-21T00:00:00 0 +2020-01-22T00:00:00 0 +2020-01-23T00:00:00 0 +2020-01-24T00:00:00 0 +2020-01-25T00:00:00 0 +2020-01-26T00:00:00 0 +2020-01-27T00:00:00 0 +2020-01-28T00:00:00 0 +2020-01-29T00:00:00 0 +2020-01-30T00:00:00 0 +2020-01-31T00:00:00 0 +2020-02-01T00:00:00 0 +2020-02-02T00:00:00 0 +2020-02-03T00:00:00 0 +2020-02-04T00:00:00 0 +2020-02-05T00:00:00 0 +2020-02-06T00:00:00 0 +2020-02-07T00:00:00 0 +2020-02-08T00:00:00 0 +2020-02-09T00:00:00 0 +2020-02-10T00:00:00 0 +2020-02-11T00:00:00 0 +2020-02-12T00:00:00 0 +2020-02-13T00:00:00 0 +2020-02-14T00:00:00 0 +2020-02-15T00:00:00 0 +2020-02-16T00:00:00 0 +2020-02-17T00:00:00 0 +2020-02-18T00:00:00 0 +2020-02-19T00:00:00 0 +2020-02-20T00:00:00 0 +2020-02-21T00:00:00 0 +2020-02-22T00:00:00 0 +2020-02-23T00:00:00 0 +2020-02-24T00:00:00 0 +2020-02-25T00:00:00 0 +2020-02-26T00:00:00 0 +2020-02-27T00:00:00 0 +2020-02-28T00:00:00 0 +2020-02-29T00:00:00 0 +2020-03-01T00:00:00 0 +2020-03-02T00:00:00 0 +2020-03-03T00:00:00 0 +2020-03-04T00:00:00 0 +2020-03-05T00:00:00 0 +2020-03-06T00:00:00 0 +2020-03-07T00:00:00 0 +2020-03-08T00:00:00 0 +2020-03-09T00:00:00 0 +2020-03-10T00:00:00 0 +2020-03-11T00:00:00 0 +2020-03-12T00:00:00 0 +2020-03-13T00:00:00 0 +2020-03-14T00:00:00 0 +2020-03-15T00:00:00 0 +2020-03-16T00:00:00 0 +2020-03-17T00:00:00 0 +2020-03-18T00:00:00 0 +2020-03-19T00:00:00 0 +2020-03-20T00:00:00 0 +2020-03-21T00:00:00 0 +2020-03-22T00:00:00 0 +2020-03-23T00:00:00 0 +2020-03-24T00:00:00 0 +2020-03-25T00:00:00 0 +2020-03-26T00:00:00 0 +2020-03-27T00:00:00 0 +2020-03-28T00:00:00 0 +2020-03-29T00:00:00 0 +2020-03-30T00:00:00 0 +2020-03-31T00:00:00 0 +2020-04-01T00:00:00 0 +2020-04-02T00:00:00 0 +2020-04-03T00:00:00 0 +2020-04-04T00:00:00 0 +2020-04-05T00:00:00 0 +2020-04-06T00:00:00 0 +2020-04-07T00:00:00 0 +2020-04-08T00:00:00 0 +2020-04-09T00:00:00 0 +2020-04-10T00:00:00 0 +2020-04-11T00:00:00 0 +2020-04-12T00:00:00 0 +2020-04-13T00:00:00 0 +2020-04-14T00:00:00 0 +2020-04-15T00:00:00 0 +2020-04-16T00:00:00 0 +2020-04-17T00:00:00 0 +2020-04-18T00:00:00 0 +2020-04-19T00:00:00 0 +2020-04-20T00:00:00 0 +2020-04-21T00:00:00 0 +2020-04-22T00:00:00 0 +2020-04-23T00:00:00 0 +2020-04-24T00:00:00 0 +2020-04-25T00:00:00 0 +2020-04-26T00:00:00 0 +2020-04-27T00:00:00 0 +2020-04-28T00:00:00 0 +2020-04-29T00:00:00 0 +2020-04-30T00:00:00 0 +2020-05-01T00:00:00 0 +2020-05-02T00:00:00 0 +2020-05-03T00:00:00 0 +2020-05-04T00:00:00 0 +2020-05-05T00:00:00 0 +2020-05-06T00:00:00 0 +2020-05-07T00:00:00 0 +2020-05-08T00:00:00 0 +2020-05-09T00:00:00 0 +2020-05-10T00:00:00 0 +2020-05-11T00:00:00 0 +2020-05-12T00:00:00 0 +2020-05-13T00:00:00 0 +2020-05-14T00:00:00 0 +2020-05-15T00:00:00 0 +2020-05-16T00:00:00 0 +2020-05-17T00:00:00 0 +2020-05-18T00:00:00 0 +2020-05-19T00:00:00 0 +2020-05-20T00:00:00 0 +2020-05-21T00:00:00 0 +2020-05-22T00:00:00 0 +2020-05-23T00:00:00 0 +2020-05-24T00:00:00 0 +2020-05-25T00:00:00 0 +2020-05-26T00:00:00 0 +2020-05-27T00:00:00 0 +2020-05-28T00:00:00 0 +2020-05-29T00:00:00 0 +2020-05-30T00:00:00 0 +2020-05-31T00:00:00 0 +2020-06-01T00:00:00 0 +2020-06-02T00:00:00 0 +2020-06-03T00:00:00 0 +2020-06-04T00:00:00 0 +2020-06-05T00:00:00 0 +2020-06-06T00:00:00 0 +2020-06-07T00:00:00 0 +2020-06-08T00:00:00 0 +2020-06-09T00:00:00 0 +2020-06-10T00:00:00 0 +2020-06-11T00:00:00 0 +2020-06-12T00:00:00 0 +2020-06-13T00:00:00 0 +2020-06-14T00:00:00 0 +2020-06-15T00:00:00 0 +2020-06-16T00:00:00 0 +2020-06-17T00:00:00 0 +2020-06-18T00:00:00 0 +2020-06-19T00:00:00 0 +2020-06-20T00:00:00 0 +2020-06-21T00:00:00 0 +2020-06-22T00:00:00 0 +2020-06-23T00:00:00 0 +2020-06-24T00:00:00 0 +2020-06-25T00:00:00 0 +2020-06-26T00:00:00 0 +2020-06-27T00:00:00 0 +2020-06-28T00:00:00 0 +2020-06-29T00:00:00 0 +2020-06-30T00:00:00 0 +2020-07-01T00:00:00 0 +2020-07-02T00:00:00 0 +2020-07-03T00:00:00 0 +2020-07-04T00:00:00 0 +2020-07-05T00:00:00 0 +2020-07-06T00:00:00 0 +2020-07-07T00:00:00 0 +2020-07-08T00:00:00 0 +2020-07-09T00:00:00 0 +2020-07-10T00:00:00 0 +2020-07-11T00:00:00 0 +2020-07-12T00:00:00 0 +2020-07-13T00:00:00 0 +2020-07-14T00:00:00 0 +2020-07-15T00:00:00 0 +2020-07-16T00:00:00 0 +2020-07-17T00:00:00 0 +2020-07-18T00:00:00 0 +2020-07-19T00:00:00 0 +2020-07-20T00:00:00 0 +2020-07-21T00:00:00 0 +2020-07-22T00:00:00 0 +2020-07-23T00:00:00 0 +2020-07-24T00:00:00 0 +2020-07-25T00:00:00 0 +2020-07-26T00:00:00 0 +2020-07-27T00:00:00 0 +2020-07-28T00:00:00 0 +2020-07-29T00:00:00 0 +2020-07-30T00:00:00 0 +2020-07-31T00:00:00 0 +2020-08-01T00:00:00 0 +2020-08-02T00:00:00 0 +2020-08-03T00:00:00 0 +2020-08-04T00:00:00 0 +2020-08-05T00:00:00 0 +2020-08-06T00:00:00 0 +2020-08-07T00:00:00 0 +2020-08-08T00:00:00 0 +2020-08-09T00:00:00 0 +2020-08-10T00:00:00 0 +2020-08-11T00:00:00 0 +2020-08-12T00:00:00 0 +2020-08-13T00:00:00 0 +2020-08-14T00:00:00 0 +2020-08-15T00:00:00 0 +2020-08-16T00:00:00 0 +2020-08-17T00:00:00 0 +2020-08-18T00:00:00 0 +2020-08-19T00:00:00 0 +2020-08-20T00:00:00 0 +2020-08-21T00:00:00 0 +2020-08-22T00:00:00 0 +2020-08-23T00:00:00 0 +2020-08-24T00:00:00 0 +2020-08-25T00:00:00 0 +2020-08-26T00:00:00 0 +2020-08-27T00:00:00 0 +2020-08-28T00:00:00 0 +2020-08-29T00:00:00 0 +2020-08-30T00:00:00 0 +2020-08-31T00:00:00 0 +2020-09-01T00:00:00 0 +2020-09-02T00:00:00 0 +2020-09-03T00:00:00 0 +2020-09-04T00:00:00 0 +2020-09-05T00:00:00 0 +2020-09-06T00:00:00 0 +2020-09-07T00:00:00 0 +2020-09-08T00:00:00 0 +2020-09-09T00:00:00 0 +2020-09-10T00:00:00 0 +2020-09-11T00:00:00 0 +2020-09-12T00:00:00 0 +2020-09-13T00:00:00 0 +2020-09-14T00:00:00 0 +2020-09-15T00:00:00 0 +2020-09-16T00:00:00 0 +2020-09-17T00:00:00 0 +2020-09-18T00:00:00 0 +2020-09-19T00:00:00 0 +2020-09-20T00:00:00 0 +2020-09-21T00:00:00 0 +2020-09-22T00:00:00 0 +2020-09-23T00:00:00 0 +2020-09-24T00:00:00 0 +2020-09-25T00:00:00 0 +2020-09-26T00:00:00 0 +2020-09-27T00:00:00 0 +2020-09-28T00:00:00 0 +2020-09-29T00:00:00 0 +2020-09-30T00:00:00 0 +2020-10-01T00:00:00 0 +2020-10-02T00:00:00 0 +2020-10-03T00:00:00 0 +2020-10-04T00:00:00 0 +2020-10-05T00:00:00 0 +2020-10-06T00:00:00 0 +2020-10-07T00:00:00 0 +2020-10-08T00:00:00 0 +2020-10-09T00:00:00 0 +2020-10-10T00:00:00 0 +2020-10-11T00:00:00 0 +2020-10-12T00:00:00 0 +2020-10-13T00:00:00 0 +2020-10-14T00:00:00 0 +2020-10-15T00:00:00 0 +2020-10-16T00:00:00 0 +2020-10-17T00:00:00 0 +2020-10-18T00:00:00 0 +2020-10-19T00:00:00 0 +2020-10-20T00:00:00 0 +2020-10-21T00:00:00 0 +2020-10-22T00:00:00 0 +2020-10-23T00:00:00 0 +2020-10-24T00:00:00 0 +2020-10-25T00:00:00 0 +2020-10-26T00:00:00 0 +2020-10-27T00:00:00 0 +2020-10-28T00:00:00 0 +2020-10-29T00:00:00 0 +2020-10-30T00:00:00 0 +2020-10-31T00:00:00 0 +2020-11-01T00:00:00 0 +2020-11-02T00:00:00 0 +2020-11-03T00:00:00 0 +2020-11-04T00:00:00 0 +2020-11-05T00:00:00 0 +2020-11-06T00:00:00 0 +2020-11-07T00:00:00 0 +2020-11-08T00:00:00 0 +2020-11-09T00:00:00 0 +2020-11-10T00:00:00 0 +2020-11-11T00:00:00 0 +2020-11-12T00:00:00 0 +2020-11-13T00:00:00 0 +2020-11-14T00:00:00 0 +2020-11-15T00:00:00 0 +2020-11-16T00:00:00 0 +2020-11-17T00:00:00 0 +2020-11-18T00:00:00 0 +2020-11-19T00:00:00 0 +2020-11-20T00:00:00 0 +2020-11-21T00:00:00 0 +2020-11-22T00:00:00 0 +2020-11-23T00:00:00 0 +2020-11-24T00:00:00 0 +2020-11-25T00:00:00 0 +2020-11-26T00:00:00 0 +2020-11-27T00:00:00 0 +2020-11-28T00:00:00 0 +2020-11-29T00:00:00 0 +2020-11-30T00:00:00 0 +2020-12-01T00:00:00 0 +2020-12-02T00:00:00 0 +2020-12-03T00:00:00 0 +2020-12-04T00:00:00 0 +2020-12-05T00:00:00 0 +2020-12-06T00:00:00 0 +2020-12-07T00:00:00 0 +2020-12-08T00:00:00 0 +2020-12-09T00:00:00 0 +2020-12-10T00:00:00 0 +2020-12-11T00:00:00 0 +2020-12-12T00:00:00 0 +2020-12-13T00:00:00 0 +2020-12-14T00:00:00 0 +2020-12-15T00:00:00 0 +2020-12-16T00:00:00 0 +2020-12-17T00:00:00 0 +2020-12-18T00:00:00 0 +2020-12-19T00:00:00 0 +2020-12-20T00:00:00 0 +2020-12-21T00:00:00 0 +2020-12-22T00:00:00 0 +2020-12-23T00:00:00 0 +2020-12-24T00:00:00 0 +2020-12-25T00:00:00 0 +2020-12-26T00:00:00 0 +2020-12-27T00:00:00 0 +2020-12-28T00:00:00 0 +2020-12-29T00:00:00 0 +2020-12-30T00:00:00 0 +2020-12-31T00:00:00 0 +2021-01-01T00:00:00 0 +2021-01-02T00:00:00 0 +2021-01-03T00:00:00 0 +2021-01-04T00:00:00 0 +2021-01-05T00:00:00 0 +2021-01-06T00:00:00 0 +2021-01-07T00:00:00 0 +2021-01-08T00:00:00 0 +2021-01-09T00:00:00 0 +2021-01-10T00:00:00 0 +2021-01-11T00:00:00 0 +2021-01-12T00:00:00 0 +2021-01-13T00:00:00 0 +2021-01-14T00:00:00 0 +2021-01-15T00:00:00 0 +2021-01-16T00:00:00 0 +2021-01-17T00:00:00 0 +2021-01-18T00:00:00 0 +2021-01-19T00:00:00 0 +2021-01-20T00:00:00 0 +2021-01-21T00:00:00 0 +2021-01-22T00:00:00 0 +2021-01-23T00:00:00 0 +2021-01-24T00:00:00 0 +2021-01-25T00:00:00 0 +2021-01-26T00:00:00 0 +2021-01-27T00:00:00 0 +2021-01-28T00:00:00 0 +2021-01-29T00:00:00 0 +2021-01-30T00:00:00 0 +2021-01-31T00:00:00 0 +2021-02-01T00:00:00 0 +2021-02-02T00:00:00 0 +2021-02-03T00:00:00 0 +2021-02-04T00:00:00 0 +2021-02-05T00:00:00 0 +2021-02-06T00:00:00 0 +2021-02-07T00:00:00 0 +2021-02-08T00:00:00 0 +2021-02-09T00:00:00 0 +2021-02-10T00:00:00 0 +2021-02-11T00:00:00 0 +2021-02-12T00:00:00 0 +2021-02-13T00:00:00 0 +2021-02-14T00:00:00 0 +2021-02-15T00:00:00 0 +2021-02-16T00:00:00 0 +2021-02-17T00:00:00 0 +2021-02-18T00:00:00 0 +2021-02-19T00:00:00 0 +2021-02-20T00:00:00 0 +2021-02-21T00:00:00 0 +2021-02-22T00:00:00 0 +2021-02-23T00:00:00 0 +2021-02-24T00:00:00 0 +2021-02-25T00:00:00 0 +2021-02-26T00:00:00 0 +2021-02-27T00:00:00 0 +2021-02-28T00:00:00 0 +2021-03-01T00:00:00 0 +2021-03-02T00:00:00 0 +2021-03-03T00:00:00 0 +2021-03-04T00:00:00 0 +2021-03-05T00:00:00 0 +2021-03-06T00:00:00 0 +2021-03-07T00:00:00 0 +2021-03-08T00:00:00 0 +2021-03-09T00:00:00 0 +2021-03-10T00:00:00 0 +2021-03-11T00:00:00 0 +2021-03-12T00:00:00 0 +2021-03-13T00:00:00 0 +2021-03-14T00:00:00 0 +2021-03-15T00:00:00 0 +2021-03-16T00:00:00 0 +2021-03-17T00:00:00 0 +2021-03-18T00:00:00 0 +2021-03-19T00:00:00 0 +2021-03-20T00:00:00 0 +2021-03-21T00:00:00 0 +2021-03-22T00:00:00 0 +2021-03-23T00:00:00 0 +2021-03-24T00:00:00 0 +2021-03-25T00:00:00 0 +2021-03-26T00:00:00 0 +2021-03-27T00:00:00 0 +2021-03-28T00:00:00 0 +2021-03-29T00:00:00 0 +2021-03-30T00:00:00 0 +2021-03-31T00:00:00 0 +2021-04-01T00:00:00 0 +2021-04-02T00:00:00 0 +2021-04-03T00:00:00 0 +2021-04-04T00:00:00 0 +2021-04-05T00:00:00 0 +2021-04-06T00:00:00 0 +2021-04-07T00:00:00 0 +2021-04-08T00:00:00 0 +2021-04-09T00:00:00 0 +2021-04-10T00:00:00 0 +2021-04-11T00:00:00 0 +2021-04-12T00:00:00 0 +2021-04-13T00:00:00 0 +2021-04-14T00:00:00 0 +2021-04-15T00:00:00 0 +2021-04-16T00:00:00 0 +2021-04-17T00:00:00 0 +2021-04-18T00:00:00 0 +2021-04-19T00:00:00 0 +2021-04-20T00:00:00 0 +2021-04-21T00:00:00 0 +2021-04-22T00:00:00 0 +2021-04-23T00:00:00 0 +2021-04-24T00:00:00 0 +2021-04-25T00:00:00 0 +2021-04-26T00:00:00 0 +2021-04-27T00:00:00 0 +2021-04-28T00:00:00 0 +2021-04-29T00:00:00 0 +2021-04-30T00:00:00 0 +2021-05-01T00:00:00 0 +2021-05-02T00:00:00 0 +2021-05-03T00:00:00 0 +2021-05-04T00:00:00 0 +2021-05-05T00:00:00 0 +2021-05-06T00:00:00 0 +2021-05-07T00:00:00 0 +2021-05-08T00:00:00 0 +2021-05-09T00:00:00 0 +2021-05-10T00:00:00 0 +2021-05-11T00:00:00 0 +2021-05-12T00:00:00 0 +2021-05-13T00:00:00 0 +2021-05-14T00:00:00 0 +2021-05-15T00:00:00 0 +2021-05-16T00:00:00 0 +2021-05-17T00:00:00 0 +2021-05-18T00:00:00 0 +2021-05-19T00:00:00 0 +2021-05-20T00:00:00 0 +2021-05-21T00:00:00 0 +2021-05-22T00:00:00 0 +2021-05-23T00:00:00 0 +2021-05-24T00:00:00 0 +2021-05-25T00:00:00 0 +2021-05-26T00:00:00 0 +2021-05-27T00:00:00 0 +2021-05-28T00:00:00 0 +2021-05-29T00:00:00 0 +2021-05-30T00:00:00 0 +2021-05-31T00:00:00 0 +2021-06-01T00:00:00 0 +2021-06-02T00:00:00 0 +2021-06-03T00:00:00 0 +2021-06-04T00:00:00 0 +2021-06-05T00:00:00 0 +2021-06-06T00:00:00 0 +2021-06-07T00:00:00 0 +2021-06-08T00:00:00 0 +2021-06-09T00:00:00 0 +2021-06-10T00:00:00 0 +2021-06-11T00:00:00 0 +2021-06-12T00:00:00 0 +2021-06-13T00:00:00 0 +2021-06-14T00:00:00 0 +2021-06-15T00:00:00 0 +2021-06-16T00:00:00 0 +2021-06-17T00:00:00 0 +2021-06-18T00:00:00 0 +2021-06-19T00:00:00 0 +2021-06-20T00:00:00 0 +2021-06-21T00:00:00 0 +2021-06-22T00:00:00 0 +2021-06-23T00:00:00 0 +2021-06-24T00:00:00 0 +2021-06-25T00:00:00 0 +2021-06-26T00:00:00 0 +2021-06-27T00:00:00 0 +2021-06-28T00:00:00 0 +2021-06-29T00:00:00 0 +2021-06-30T00:00:00 0 +2021-07-01T00:00:00 0 +2021-07-02T00:00:00 0 +2021-07-03T00:00:00 0 +2021-07-04T00:00:00 0 +2021-07-05T00:00:00 0 +2021-07-06T00:00:00 0 +2021-07-07T00:00:00 0 +2021-07-08T00:00:00 0 +2021-07-09T00:00:00 0 +2021-07-10T00:00:00 0 +2021-07-11T00:00:00 0 +2021-07-12T00:00:00 0 +2021-07-13T00:00:00 0 +2021-07-14T00:00:00 0 +2021-07-15T00:00:00 0 +2021-07-16T00:00:00 0 +2021-07-17T00:00:00 0 +2021-07-18T00:00:00 0 +2021-07-19T00:00:00 0 +2021-07-20T00:00:00 0 +2021-07-21T00:00:00 0 +2021-07-22T00:00:00 0 +2021-07-23T00:00:00 0 +2021-07-24T00:00:00 0 +2021-07-25T00:00:00 0 +2021-07-26T00:00:00 0 +2021-07-27T00:00:00 0 +2021-07-28T00:00:00 0 +2021-07-29T00:00:00 0 +2021-07-30T00:00:00 0 +2021-07-31T00:00:00 0 +2021-08-01T00:00:00 0 +2021-08-02T00:00:00 0 +2021-08-03T00:00:00 0 +2021-08-04T00:00:00 0 +2021-08-05T00:00:00 0 +2021-08-06T00:00:00 0 +2021-08-07T00:00:00 0 +2021-08-08T00:00:00 0 +2021-08-09T00:00:00 0 +2021-08-10T00:00:00 0 +2021-08-11T00:00:00 0 +2021-08-12T00:00:00 0 +2021-08-13T00:00:00 0 +2021-08-14T00:00:00 0 +2021-08-15T00:00:00 0 +2021-08-16T00:00:00 0 +2021-08-17T00:00:00 0 +2021-08-18T00:00:00 0 +2021-08-19T00:00:00 0 +2021-08-20T00:00:00 0 +2021-08-21T00:00:00 0 +2021-08-22T00:00:00 0 +2021-08-23T00:00:00 0 +2021-08-24T00:00:00 0 +2021-08-25T00:00:00 0 +2021-08-26T00:00:00 0 +2021-08-27T00:00:00 0 +2021-08-28T00:00:00 0 +2021-08-29T00:00:00 0 +2021-08-30T00:00:00 0 +2021-08-31T00:00:00 0 +2021-09-01T00:00:00 0 +2021-09-02T00:00:00 0 +2021-09-03T00:00:00 0 +2021-09-04T00:00:00 0 +2021-09-05T00:00:00 0 +2021-09-06T00:00:00 0 +2021-09-07T00:00:00 0 +2021-09-08T00:00:00 0 +2021-09-09T00:00:00 0 +2021-09-10T00:00:00 0 +2021-09-11T00:00:00 0 +2021-09-12T00:00:00 0 +2021-09-13T00:00:00 0 +2021-09-14T00:00:00 0 +2021-09-15T00:00:00 0 +2021-09-16T00:00:00 0 +2021-09-17T00:00:00 0 +2021-09-18T00:00:00 0 +2021-09-19T00:00:00 0 +2021-09-20T00:00:00 0 +2021-09-21T00:00:00 0 +2021-09-22T00:00:00 0 +2021-09-23T00:00:00 0 +2021-09-24T00:00:00 0 +2021-09-25T00:00:00 0 +2021-09-26T00:00:00 0 +2021-09-27T00:00:00 0 +2021-09-28T00:00:00 0 +2021-09-29T00:00:00 0 +2021-09-30T00:00:00 0 +2021-10-01T00:00:00 0 +2021-10-02T00:00:00 0 +2021-10-03T00:00:00 0 +2021-10-04T00:00:00 0 +2021-10-05T00:00:00 0 +2021-10-06T00:00:00 0 +2021-10-07T00:00:00 0 +2021-10-08T00:00:00 0 +2021-10-09T00:00:00 0 +2021-10-10T00:00:00 0 +2021-10-11T00:00:00 0 +2021-10-12T00:00:00 0 +2021-10-13T00:00:00 0 +2021-10-14T00:00:00 0 +2021-10-15T00:00:00 0 +2021-10-16T00:00:00 0 +2021-10-17T00:00:00 0 +2021-10-18T00:00:00 0 +2021-10-19T00:00:00 0 +2021-10-20T00:00:00 0 +2021-10-21T00:00:00 0 +2021-10-22T00:00:00 0 +2021-10-23T00:00:00 0 +2021-10-24T00:00:00 0 +2021-10-25T00:00:00 0 +2021-10-26T00:00:00 0 +2021-10-27T00:00:00 0 +2021-10-28T00:00:00 0 +2021-10-29T00:00:00 0 +2021-10-30T00:00:00 0 +2021-10-31T00:00:00 0 +2021-11-01T00:00:00 0 +2021-11-02T00:00:00 0 +2021-11-03T00:00:00 0 +2021-11-04T00:00:00 0 +2021-11-05T00:00:00 0 +2021-11-06T00:00:00 0 +2021-11-07T00:00:00 0 +2021-11-08T00:00:00 0 +2021-11-09T00:00:00 0 +2021-11-10T00:00:00 0 +2021-11-11T00:00:00 0 +2021-11-12T00:00:00 0 +2021-11-13T00:00:00 0 +2021-11-14T00:00:00 0 +2021-11-15T00:00:00 0 +2021-11-16T00:00:00 0 +2021-11-17T00:00:00 0 +2021-11-18T00:00:00 0 +2021-11-19T00:00:00 0 +2021-11-20T00:00:00 0 +2021-11-21T00:00:00 0 +2021-11-22T00:00:00 0 +2021-11-23T00:00:00 0 +2021-11-24T00:00:00 0 +2021-11-25T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_metric_time__query_output.txt new file mode 100644 index 0000000000..998ef403ed --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_metric_time__query_output.txt @@ -0,0 +1,11 @@ +test_name: test_simple_fill_nulls_with_0_metric_time +test_filename: test_fill_nulls_with_0.py +--- +metric_time__week bookings_fill_nulls_with_0 +------------------- ---------------------------- +2019-11-25T00:00:00 1 +2019-12-02T00:00:00 0 +2019-12-09T00:00:00 0 +2019-12-16T00:00:00 30 +2019-12-23T00:00:00 0 +2019-12-30T00:00:00 15 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_month__query_output.txt new file mode 100644 index 0000000000..820aee54a1 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_fill_nulls_with_0_month__query_output.txt @@ -0,0 +1,29 @@ +test_name: test_simple_fill_nulls_with_0_month +test_filename: test_fill_nulls_with_0.py +--- +metric_time__month bookings_fill_nulls_with_0 +-------------------- ---------------------------- +2019-01-01T00:00:00 0 +2019-02-01T00:00:00 0 +2019-03-01T00:00:00 0 +2019-04-01T00:00:00 0 +2019-05-01T00:00:00 0 +2019-06-01T00:00:00 0 +2019-07-01T00:00:00 0 +2019-08-01T00:00:00 0 +2019-09-01T00:00:00 0 +2019-10-01T00:00:00 0 +2019-11-01T00:00:00 0 +2019-12-01T00:00:00 31 +2020-01-01T00:00:00 15 +2020-02-01T00:00:00 0 +2020-03-01T00:00:00 0 +2020-04-01T00:00:00 0 +2020-05-01T00:00:00 0 +2020-06-01T00:00:00 0 +2020-07-01T00:00:00 0 +2020-08-01T00:00:00 0 +2020-09-01T00:00:00 0 +2020-10-01T00:00:00 0 +2020-11-01T00:00:00 0 +2020-12-01T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt new file mode 100644 index 0000000000..2f091af136 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt @@ -0,0 +1,45 @@ +test_name: test_simple_join_to_time_spine +test_filename: test_fill_nulls_with_0.py +--- +metric_time__day bookings_join_to_time_spine +------------------- ----------------------------- +2019-11-27T00:00:00 0 +2019-11-28T00:00:00 0 +2019-11-29T00:00:00 0 +2019-11-30T00:00:00 0 +2019-12-01T00:00:00 1 +2019-12-02T00:00:00 0 +2019-12-03T00:00:00 0 +2019-12-04T00:00:00 0 +2019-12-05T00:00:00 0 +2019-12-06T00:00:00 0 +2019-12-07T00:00:00 0 +2019-12-08T00:00:00 0 +2019-12-09T00:00:00 0 +2019-12-10T00:00:00 0 +2019-12-11T00:00:00 0 +2019-12-12T00:00:00 0 +2019-12-13T00:00:00 0 +2019-12-14T00:00:00 0 +2019-12-15T00:00:00 0 +2019-12-16T00:00:00 0 +2019-12-17T00:00:00 0 +2019-12-18T00:00:00 10 +2019-12-19T00:00:00 18 +2019-12-20T00:00:00 2 +2019-12-21T00:00:00 0 +2019-12-22T00:00:00 0 +2019-12-23T00:00:00 0 +2019-12-24T00:00:00 0 +2019-12-25T00:00:00 0 +2019-12-26T00:00:00 0 +2019-12-27T00:00:00 0 +2019-12-28T00:00:00 0 +2019-12-29T00:00:00 0 +2019-12-30T00:00:00 0 +2019-12-31T00:00:00 0 +2020-01-01T00:00:00 5 +2020-01-02T00:00:00 9 +2020-01-03T00:00:00 1 +2020-01-04T00:00:00 0 +2020-01-05T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql new file mode 100644 index 0000000000..5ff4513561 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql @@ -0,0 +1,384 @@ +test_name: test_cumulative_fill_nulls +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__day + , COALESCE(subq_10.bookers, 0) AS every_two_days_bookers_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_9.metric_time__day AS metric_time__day + , subq_6.bookers AS bookers + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_8.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_5.metric_time__day + , COUNT(DISTINCT subq_5.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'metric_time__day'] + SELECT + subq_4.metric_time__day + , subq_4.bookers + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_9.metric_time__day = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql new file mode 100644 index 0000000000..7b101b7756 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_cumulative_fill_nulls +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookers, 0) AS every_two_days_bookers_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_17.bookers AS bookers + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Join Self Over Time Range + -- Pass Only Elements: ['bookers', 'metric_time__day'] + -- Aggregate Measures + SELECT + subq_14.ds AS metric_time__day + , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers + FROM ***************************.mf_time_spine subq_14 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + subq_14.ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + time_spine_src_28006.ds = subq_17.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql new file mode 100644 index 0000000000..ee6d69f599 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql @@ -0,0 +1,660 @@ +test_name: test_derived_fill_nulls_for_one_input_metric +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day + , bookings_fill_nulls_with_0 - bookings_2_weeks_ago AS bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) AS metric_time__day + , COALESCE(MAX(subq_8.bookings_fill_nulls_with_0), 0) AS bookings_fill_nulls_with_0 + , MAX(subq_17.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__day + , COALESCE(subq_7.bookings, 0) AS bookings_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__day AS metric_time__day + , subq_3.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_5.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_4.ds__day AS metric_time__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__day = subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_16.metric_time__day + , subq_16.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_15.metric_time__day + , SUM(subq_15.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_14.metric_time__day + , subq_14.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_10.ds__day AS ds__day + , subq_10.ds__week AS ds__week + , subq_10.ds__month AS ds__month + , subq_10.ds__quarter AS ds__quarter + , subq_10.ds__year AS ds__year + , subq_10.ds__extract_year AS ds__extract_year + , subq_10.ds__extract_quarter AS ds__extract_quarter + , subq_10.ds__extract_month AS ds__extract_month + , subq_10.ds__extract_day AS ds__extract_day + , subq_10.ds__extract_dow AS ds__extract_dow + , subq_10.ds__extract_doy AS ds__extract_doy + , subq_10.ds_partitioned__day AS ds_partitioned__day + , subq_10.ds_partitioned__week AS ds_partitioned__week + , subq_10.ds_partitioned__month AS ds_partitioned__month + , subq_10.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_10.ds_partitioned__year AS ds_partitioned__year + , subq_10.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_10.paid_at__day AS paid_at__day + , subq_10.paid_at__week AS paid_at__week + , subq_10.paid_at__month AS paid_at__month + , subq_10.paid_at__quarter AS paid_at__quarter + , subq_10.paid_at__year AS paid_at__year + , subq_10.paid_at__extract_year AS paid_at__extract_year + , subq_10.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_10.paid_at__extract_month AS paid_at__extract_month + , subq_10.paid_at__extract_day AS paid_at__extract_day + , subq_10.paid_at__extract_dow AS paid_at__extract_dow + , subq_10.paid_at__extract_doy AS paid_at__extract_doy + , subq_10.booking__ds__day AS booking__ds__day + , subq_10.booking__ds__week AS booking__ds__week + , subq_10.booking__ds__month AS booking__ds__month + , subq_10.booking__ds__quarter AS booking__ds__quarter + , subq_10.booking__ds__year AS booking__ds__year + , subq_10.booking__ds__extract_year AS booking__ds__extract_year + , subq_10.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_10.booking__ds__extract_month AS booking__ds__extract_month + , subq_10.booking__ds__extract_day AS booking__ds__extract_day + , subq_10.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_10.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day AS booking__paid_at__day + , subq_10.booking__paid_at__week AS booking__paid_at__week + , subq_10.booking__paid_at__month AS booking__paid_at__month + , subq_10.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_10.booking__paid_at__year AS booking__paid_at__year + , subq_10.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_10.metric_time__week AS metric_time__week + , subq_10.metric_time__month AS metric_time__month + , subq_10.metric_time__quarter AS metric_time__quarter + , subq_10.metric_time__year AS metric_time__year + , subq_10.metric_time__extract_year AS metric_time__extract_year + , subq_10.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_10.metric_time__extract_month AS metric_time__extract_month + , subq_10.metric_time__extract_day AS metric_time__extract_day + , subq_10.metric_time__extract_dow AS metric_time__extract_dow + , subq_10.metric_time__extract_doy AS metric_time__extract_doy + , subq_13.metric_time__day AS metric_time__day + , subq_10.listing AS listing + , subq_10.guest AS guest + , subq_10.host AS host + , subq_10.booking__listing AS booking__listing + , subq_10.booking__guest AS booking__guest + , subq_10.booking__host AS booking__host + , subq_10.is_instant AS is_instant + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + , subq_10.instant_bookings AS instant_bookings + , subq_10.booking_value AS booking_value + , subq_10.max_booking_value AS max_booking_value + , subq_10.min_booking_value AS min_booking_value + , subq_10.bookers AS bookers + , subq_10.average_booking_value AS average_booking_value + , subq_10.referred_bookings AS referred_bookings + , subq_10.median_booking_value AS median_booking_value + , subq_10.booking_value_p99 AS booking_value_p99 + , subq_10.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_12.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_11.ds__day AS metric_time__day + , subq_11.ds__week + , subq_11.ds__month + , subq_11.ds__quarter + , subq_11.ds__year + , subq_11.ds__extract_year + , subq_11.ds__extract_quarter + , subq_11.ds__extract_month + , subq_11.ds__extract_day + , subq_11.ds__extract_dow + , subq_11.ds__extract_doy + , subq_11.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_partitioned__day + , subq_9.ds_partitioned__week + , subq_9.ds_partitioned__month + , subq_9.ds_partitioned__quarter + , subq_9.ds_partitioned__year + , subq_9.ds_partitioned__extract_year + , subq_9.ds_partitioned__extract_quarter + , subq_9.ds_partitioned__extract_month + , subq_9.ds_partitioned__extract_day + , subq_9.ds_partitioned__extract_dow + , subq_9.ds_partitioned__extract_doy + , subq_9.paid_at__day + , subq_9.paid_at__week + , subq_9.paid_at__month + , subq_9.paid_at__quarter + , subq_9.paid_at__year + , subq_9.paid_at__extract_year + , subq_9.paid_at__extract_quarter + , subq_9.paid_at__extract_month + , subq_9.paid_at__extract_day + , subq_9.paid_at__extract_dow + , subq_9.paid_at__extract_doy + , subq_9.booking__ds__day + , subq_9.booking__ds__week + , subq_9.booking__ds__month + , subq_9.booking__ds__quarter + , subq_9.booking__ds__year + , subq_9.booking__ds__extract_year + , subq_9.booking__ds__extract_quarter + , subq_9.booking__ds__extract_month + , subq_9.booking__ds__extract_day + , subq_9.booking__ds__extract_dow + , subq_9.booking__ds__extract_doy + , subq_9.booking__ds_partitioned__day + , subq_9.booking__ds_partitioned__week + , subq_9.booking__ds_partitioned__month + , subq_9.booking__ds_partitioned__quarter + , subq_9.booking__ds_partitioned__year + , subq_9.booking__ds_partitioned__extract_year + , subq_9.booking__ds_partitioned__extract_quarter + , subq_9.booking__ds_partitioned__extract_month + , subq_9.booking__ds_partitioned__extract_day + , subq_9.booking__ds_partitioned__extract_dow + , subq_9.booking__ds_partitioned__extract_doy + , subq_9.booking__paid_at__day + , subq_9.booking__paid_at__week + , subq_9.booking__paid_at__month + , subq_9.booking__paid_at__quarter + , subq_9.booking__paid_at__year + , subq_9.booking__paid_at__extract_year + , subq_9.booking__paid_at__extract_quarter + , subq_9.booking__paid_at__extract_month + , subq_9.booking__paid_at__extract_day + , subq_9.booking__paid_at__extract_dow + , subq_9.booking__paid_at__extract_doy + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.listing + , subq_9.guest + , subq_9.host + , subq_9.booking__listing + , subq_9.booking__guest + , subq_9.booking__host + , subq_9.is_instant + , subq_9.booking__is_instant + , subq_9.bookings + , subq_9.instant_bookings + , subq_9.booking_value + , subq_9.max_booking_value + , subq_9.min_booking_value + , subq_9.bookers + , subq_9.average_booking_value + , subq_9.referred_bookings + , subq_9.median_booking_value + , subq_9.booking_value_p99 + , subq_9.discrete_booking_value_p99 + , subq_9.approximate_continuous_booking_value_p99 + , subq_9.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + addDays(subq_13.metric_time__day, CAST(-14 AS Integer)) = subq_10.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + GROUP BY + subq_15.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + ON + subq_8.metric_time__day = subq_17.metric_time__day + GROUP BY + COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql new file mode 100644 index 0000000000..e8db501100 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql @@ -0,0 +1,87 @@ +test_name: test_derived_fill_nulls_for_one_input_metric +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , bookings_fill_nulls_with_0 - bookings_2_weeks_ago AS bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) AS metric_time__day + , COALESCE(MAX(subq_27.bookings_fill_nulls_with_0), 0) AS bookings_fill_nulls_with_0 + , MAX(subq_35.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_22.bookings AS bookings + FROM rss_28018_cte rss_28018_cte + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + ON + rss_28018_cte.ds__day = subq_22.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + rss_28018_cte.ds__day AS metric_time__day + , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(rss_28018_cte.ds__day, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + rss_28018_cte.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + subq_27.metric_time__day = subq_35.metric_time__day + GROUP BY + COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql new file mode 100644 index 0000000000..0281708dea --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql @@ -0,0 +1,395 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__week + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + , subq_6.metric_time__day + , subq_6.metric_time__month + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__month AS metric_time__month + , subq_5.ds__week + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..d39c57083c --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql @@ -0,0 +1,52 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day AS metric_time__day + , subq_14.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +ON + subq_18.metric_time__day = subq_14.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql new file mode 100644 index 0000000000..785e589394 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql @@ -0,0 +1,397 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.booking__ds__day + , subq_9.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.booking__ds__day AS booking__ds__day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['booking__ds__day',] + SELECT + subq_7.booking__ds__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__week + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + , subq_6.booking__ds__day + , subq_6.metric_time__day + , subq_6.booking__ds__month + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS booking__ds__day + , subq_5.ds__day AS metric_time__day + , subq_5.ds__month AS booking__ds__month + , subq_5.ds__week + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.booking__ds__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + SELECT + subq_2.booking__ds__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.booking__ds__day = subq_4.booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql new file mode 100644 index 0000000000..4934285347 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql @@ -0,0 +1,54 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_18.booking__ds__day AS booking__ds__day + , subq_14.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['booking__ds__day',] + SELECT + booking__ds__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS booking__ds__day + , ds AS metric_time__day + , DATE_TRUNC('month', ds) AS booking__ds__month + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'booking__ds__day'] + -- Aggregate Measures + SELECT + booking__ds__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS booking__ds__day + , DATE_TRUNC('month', ds) AS booking__ds__month + , DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + GROUP BY + booking__ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +ON + subq_18.booking__ds__day = subq_14.booking__ds__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql new file mode 100644 index 0000000000..4e0c5a1118 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql @@ -0,0 +1,395 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__week + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + , subq_6.metric_time__day + , subq_6.booking__ds__month + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__month AS booking__ds__month + , subq_5.ds__week + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..cf3849813c --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql @@ -0,0 +1,52 @@ +test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day AS metric_time__day + , subq_14.bookings AS bookings_join_to_time_spine_with_tiered_filters +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS metric_time__day + , DATE_TRUNC('month', ds) AS booking__ds__month + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('month', ds) AS booking__ds__month + , DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +ON + subq_18.metric_time__day = subq_14.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql new file mode 100644 index 0000000000..66ca954900 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql @@ -0,0 +1,672 @@ +test_name: test_join_to_time_spine_with_filter_smaller_than_group_by +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.archived_users AS archived_users_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_4.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ts__week + , subq_6.ts__month + , subq_6.ts__quarter + , subq_6.ts__year + , subq_6.ts__extract_year + , subq_6.ts__extract_quarter + , subq_6.ts__extract_month + , subq_6.ts__extract_day + , subq_6.ts__extract_dow + , subq_6.ts__extract_doy + , subq_6.metric_time__day + , subq_6.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_5.ts__day AS metric_time__day + , subq_5.ts__hour AS metric_time__hour + , subq_5.ts__week + , subq_5.ts__month + , subq_5.ts__quarter + , subq_5.ts__year + , subq_5.ts__extract_year + , subq_5.ts__extract_quarter + , subq_5.ts__extract_month + , subq_5.ts__extract_day + , subq_5.ts__extract_dow + , subq_5.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.archived_users + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.created_at__day + , subq_1.created_at__week + , subq_1.created_at__month + , subq_1.created_at__quarter + , subq_1.created_at__year + , subq_1.created_at__extract_year + , subq_1.created_at__extract_quarter + , subq_1.created_at__extract_month + , subq_1.created_at__extract_day + , subq_1.created_at__extract_dow + , subq_1.created_at__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second + , subq_1.bio_added_ts__minute + , subq_1.bio_added_ts__hour + , subq_1.bio_added_ts__day + , subq_1.bio_added_ts__week + , subq_1.bio_added_ts__month + , subq_1.bio_added_ts__quarter + , subq_1.bio_added_ts__year + , subq_1.bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy + , subq_1.last_login_ts__minute + , subq_1.last_login_ts__hour + , subq_1.last_login_ts__day + , subq_1.last_login_ts__week + , subq_1.last_login_ts__month + , subq_1.last_login_ts__quarter + , subq_1.last_login_ts__year + , subq_1.last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month + , subq_1.last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy + , subq_1.archived_at__hour + , subq_1.archived_at__day + , subq_1.archived_at__week + , subq_1.archived_at__month + , subq_1.archived_at__quarter + , subq_1.archived_at__year + , subq_1.archived_at__extract_year + , subq_1.archived_at__extract_quarter + , subq_1.archived_at__extract_month + , subq_1.archived_at__extract_day + , subq_1.archived_at__extract_dow + , subq_1.archived_at__extract_doy + , subq_1.user__ds__day + , subq_1.user__ds__week + , subq_1.user__ds__month + , subq_1.user__ds__quarter + , subq_1.user__ds__year + , subq_1.user__ds__extract_year + , subq_1.user__ds__extract_quarter + , subq_1.user__ds__extract_month + , subq_1.user__ds__extract_day + , subq_1.user__ds__extract_dow + , subq_1.user__ds__extract_doy + , subq_1.user__created_at__day + , subq_1.user__created_at__week + , subq_1.user__created_at__month + , subq_1.user__created_at__quarter + , subq_1.user__created_at__year + , subq_1.user__created_at__extract_year + , subq_1.user__created_at__extract_quarter + , subq_1.user__created_at__extract_month + , subq_1.user__created_at__extract_day + , subq_1.user__created_at__extract_dow + , subq_1.user__created_at__extract_doy + , subq_1.user__ds_partitioned__day + , subq_1.user__ds_partitioned__week + , subq_1.user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day + , subq_1.user__bio_added_ts__week + , subq_1.user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute + , subq_1.user__last_login_ts__hour + , subq_1.user__last_login_ts__day + , subq_1.user__last_login_ts__week + , subq_1.user__last_login_ts__month + , subq_1.user__last_login_ts__quarter + , subq_1.user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour + , subq_1.user__archived_at__day + , subq_1.user__archived_at__week + , subq_1.user__archived_at__month + , subq_1.user__archived_at__quarter + , subq_1.user__archived_at__year + , subq_1.user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month + , subq_1.user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy + , subq_1.metric_time__hour + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.home_state + , subq_1.user__home_state + , subq_1.archived_users + FROM ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql new file mode 100644 index 0000000000..299f69d93a --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql @@ -0,0 +1,54 @@ +test_name: test_join_to_time_spine_with_filter_smaller_than_group_by +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day AS metric_time__day + , subq_14.archived_users AS archived_users_join_to_time_spine +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + -- Change Column Aliases + SELECT + DATE_TRUNC('day', ts) AS metric_time__day + , ts AS metric_time__hour + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['archived_users', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(archived_users) AS archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , DATE_TRUNC('day', archived_at) AS metric_time__day + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +ON + subq_18.metric_time__day = subq_14.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql new file mode 100644 index 0000000000..5b3a9ad3b3 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql @@ -0,0 +1,525 @@ +test_name: test_join_to_time_spine_with_filters +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_12.metric_time__day + , COALESCE(subq_12.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_11.metric_time__day + , subq_11.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_10.metric_time__day AS metric_time__day + , subq_5.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_9.metric_time__day + FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds__martian_day + , subq_8.metric_time__day + , subq_8.metric_time__week + FROM ( + -- Constrain Output with WHERE + SELECT + subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + , subq_7.metric_time__day + , subq_7.metric_time__week + FROM ( + -- Change Column Aliases + SELECT + subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE metric_time__week > '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE subq_8.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_4.metric_time__day + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.metric_time__day + , subq_2.metric_time__week + , subq_2.metric_time__month + , subq_2.metric_time__quarter + , subq_2.metric_time__year + , subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + WHERE metric_time__week > '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + subq_10.metric_time__day = subq_5.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE subq_11.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql new file mode 100644 index 0000000000..3a926ae666 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql @@ -0,0 +1,67 @@ +test_name: test_join_to_time_spine_with_filters +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_23.metric_time__day AS metric_time__day + , subq_18.bookings AS bookings + FROM ( + -- Constrain Output with WHERE + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS metric_time__day + , DATE_TRUNC('week', ds) AS metric_time__week + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + WHERE ( + metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + ) AND ( + metric_time__week > '2020-01-01' + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('week', ds) AS metric_time__week + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE metric_time__week > '2020-01-01' + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + ON + subq_23.metric_time__day = subq_18.metric_time__day + WHERE subq_23.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_25 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql new file mode 100644 index 0000000000..a96eef7594 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql @@ -0,0 +1,273 @@ +test_name: test_simple_fill_nulls_with_0_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__day + , COALESCE(subq_7.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__day AS metric_time__day + , subq_3.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_5.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_4.ds__day AS metric_time__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__day = subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..5cd27eefea --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql @@ -0,0 +1,39 @@ +test_name: test_simple_fill_nulls_with_0_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_11.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + time_spine_src_28006.ds = subq_11.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql new file mode 100644 index 0000000000..4d0bcaac82 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql @@ -0,0 +1,275 @@ +test_name: test_simple_fill_nulls_with_0_month +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , COALESCE(subq_7.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__month AS metric_time__month + , subq_3.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__month',] + SELECT + subq_5.metric_time__month + FROM ( + -- Change Column Aliases + SELECT + subq_4.ds__month AS metric_time__month + , subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__month + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__month'] + SELECT + subq_1.metric_time__month + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__month = subq_3.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql new file mode 100644 index 0000000000..9b2a1e6f71 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_simple_fill_nulls_with_0_month +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__month + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_14.metric_time__month AS metric_time__month + , subq_11.bookings AS bookings + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + -- Pass Only Elements: ['metric_time__month',] + SELECT + DATE_TRUNC('month', ds) AS metric_time__month + FROM ***************************.mf_time_spine time_spine_src_28006 + GROUP BY + DATE_TRUNC('month', ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + metric_time__month + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__month'] + SELECT + DATE_TRUNC('month', ds) AS metric_time__month + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_14.metric_time__month = subq_11.metric_time__month + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql new file mode 100644 index 0000000000..6ec4d8a4eb --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql @@ -0,0 +1,222 @@ +test_name: test_simple_fill_nulls_with_0_with_categorical_dimension +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.booking__is_instant + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Aggregate Measures + SELECT + subq_2.booking__is_instant + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant'] + SELECT + subq_1.booking__is_instant + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..0fa1aa6b65 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_simple_fill_nulls_with_0_with_categorical_dimension +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + booking__is_instant + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Aggregate Measures + SELECT + booking__is_instant + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'booking__is_instant'] + SELECT + is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql new file mode 100644 index 0000000000..a7606b9c93 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql @@ -0,0 +1,222 @@ +test_name: test_simple_fill_nulls_with_0_with_non_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.booking__paid_at__day + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Aggregate Measures + SELECT + subq_2.booking__paid_at__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__paid_at__day'] + SELECT + subq_1.booking__paid_at__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.booking__paid_at__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..f991e57ce6 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_simple_fill_nulls_with_0_with_non_metric_time +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + booking__paid_at__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Aggregate Measures + SELECT + booking__paid_at__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'booking__paid_at__day'] + SELECT + DATE_TRUNC('day', paid_at) AS booking__paid_at__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + booking__paid_at__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql new file mode 100644 index 0000000000..42d47af5d1 --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql @@ -0,0 +1,222 @@ +test_name: test_simple_fill_nulls_without_time_spine +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.metric_time__day + , COALESCE(subq_3.bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine +FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql new file mode 100644 index 0000000000..ecd85c80ea --- /dev/null +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql @@ -0,0 +1,28 @@ +test_name: test_simple_fill_nulls_without_time_spine +test_filename: test_fill_nulls_with_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0_without_time_spine +FROM ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql new file mode 100644 index 0000000000..470c1067f8 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql @@ -0,0 +1,610 @@ +test_name: test_offset_window_with_date_part +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_14.metric_time__extract_dow + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_4.metric_time__extract_dow, subq_13.metric_time__extract_dow) AS metric_time__extract_dow + , MAX(subq_4.bookings) AS bookings + , MAX(subq_13.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__extract_dow + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__extract_dow + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + SELECT + subq_1.metric_time__extract_dow + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__extract_dow + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__extract_dow + , subq_12.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_11.metric_time__extract_dow + , SUM(subq_11.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + SELECT + subq_10.metric_time__extract_dow + , subq_10.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.ds__day AS ds__day + , subq_6.ds__week AS ds__week + , subq_6.ds__month AS ds__month + , subq_6.ds__quarter AS ds__quarter + , subq_6.ds__year AS ds__year + , subq_6.ds__extract_year AS ds__extract_year + , subq_6.ds__extract_quarter AS ds__extract_quarter + , subq_6.ds__extract_month AS ds__extract_month + , subq_6.ds__extract_day AS ds__extract_day + , subq_6.ds__extract_dow AS ds__extract_dow + , subq_6.ds__extract_doy AS ds__extract_doy + , subq_6.ds_partitioned__day AS ds_partitioned__day + , subq_6.ds_partitioned__week AS ds_partitioned__week + , subq_6.ds_partitioned__month AS ds_partitioned__month + , subq_6.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_6.ds_partitioned__year AS ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_6.paid_at__day AS paid_at__day + , subq_6.paid_at__week AS paid_at__week + , subq_6.paid_at__month AS paid_at__month + , subq_6.paid_at__quarter AS paid_at__quarter + , subq_6.paid_at__year AS paid_at__year + , subq_6.paid_at__extract_year AS paid_at__extract_year + , subq_6.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_6.paid_at__extract_month AS paid_at__extract_month + , subq_6.paid_at__extract_day AS paid_at__extract_day + , subq_6.paid_at__extract_dow AS paid_at__extract_dow + , subq_6.paid_at__extract_doy AS paid_at__extract_doy + , subq_6.booking__ds__day AS booking__ds__day + , subq_6.booking__ds__week AS booking__ds__week + , subq_6.booking__ds__month AS booking__ds__month + , subq_6.booking__ds__quarter AS booking__ds__quarter + , subq_6.booking__ds__year AS booking__ds__year + , subq_6.booking__ds__extract_year AS booking__ds__extract_year + , subq_6.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_6.booking__ds__extract_month AS booking__ds__extract_month + , subq_6.booking__ds__extract_day AS booking__ds__extract_day + , subq_6.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_6.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day AS booking__paid_at__day + , subq_6.booking__paid_at__week AS booking__paid_at__week + , subq_6.booking__paid_at__month AS booking__paid_at__month + , subq_6.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_6.booking__paid_at__year AS booking__paid_at__year + , subq_6.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_6.metric_time__week AS metric_time__week + , subq_6.metric_time__month AS metric_time__month + , subq_6.metric_time__quarter AS metric_time__quarter + , subq_6.metric_time__year AS metric_time__year + , subq_6.metric_time__extract_year AS metric_time__extract_year + , subq_6.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_6.metric_time__extract_month AS metric_time__extract_month + , subq_6.metric_time__extract_day AS metric_time__extract_day + , subq_6.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_9.metric_time__extract_dow AS metric_time__extract_dow + , subq_6.listing AS listing + , subq_6.guest AS guest + , subq_6.host AS host + , subq_6.booking__listing AS booking__listing + , subq_6.booking__guest AS booking__guest + , subq_6.booking__host AS booking__host + , subq_6.is_instant AS is_instant + , subq_6.booking__is_instant AS booking__is_instant + , subq_6.bookings AS bookings + , subq_6.instant_bookings AS instant_bookings + , subq_6.booking_value AS booking_value + , subq_6.max_booking_value AS max_booking_value + , subq_6.min_booking_value AS min_booking_value + , subq_6.bookers AS bookers + , subq_6.average_booking_value AS average_booking_value + , subq_6.referred_bookings AS referred_bookings + , subq_6.median_booking_value AS median_booking_value + , subq_6.booking_value_p99 AS booking_value_p99 + , subq_6.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day', 'metric_time__extract_dow'] + SELECT + subq_8.metric_time__day + , subq_8.metric_time__extract_dow + FROM ( + -- Change Column Aliases + SELECT + subq_7.ds__day AS metric_time__day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_doy + , subq_7.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + GROUP BY + subq_11.metric_time__extract_dow + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_4.metric_time__extract_dow = subq_13.metric_time__extract_dow + GROUP BY + COALESCE(subq_4.metric_time__extract_dow, subq_13.metric_time__extract_dow) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql new file mode 100644 index 0000000000..00dc2821bb --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql @@ -0,0 +1,63 @@ +test_name: test_offset_window_with_date_part +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__extract_dow AS metric_time__extract_dow + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_19.metric_time__extract_dow, subq_27.metric_time__extract_dow) AS metric_time__extract_dow + , MAX(subq_19.bookings) AS bookings + , MAX(subq_27.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__extract_dow + , SUM(bookings) AS bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__extract_dow + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + FULL OUTER JOIN + ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS metric_time__extract_dow + , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + GROUP BY + EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + ON + subq_19.metric_time__extract_dow = subq_27.metric_time__extract_dow + GROUP BY + COALESCE(subq_19.metric_time__extract_dow, subq_27.metric_time__extract_dow) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql new file mode 100644 index 0000000000..bbf4d6ce09 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql @@ -0,0 +1,1411 @@ +test_name: test_simple_metric_with_joined_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.listing__user__bio_added_ts__minute + , subq_11.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_10.listing__user__bio_added_ts__minute + , SUM(subq_10.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__user__bio_added_ts__minute'] + SELECT + subq_9.listing__user__bio_added_ts__minute + , subq_9.bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_8.user__ds_partitioned__day AS listing__user__ds_partitioned__day + , subq_8.user__bio_added_ts__minute AS listing__user__bio_added_ts__minute + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['user__ds_partitioned__day', 'user__bio_added_ts__minute', 'listing'] + SELECT + subq_7.user__ds_partitioned__day + , subq_7.user__bio_added_ts__minute + , subq_7.listing + FROM ( + -- Join Standard Outputs + SELECT + subq_6.home_state AS user__home_state + , subq_6.ds__day AS user__ds__day + , subq_6.ds__week AS user__ds__week + , subq_6.ds__month AS user__ds__month + , subq_6.ds__quarter AS user__ds__quarter + , subq_6.ds__year AS user__ds__year + , subq_6.ds__extract_year AS user__ds__extract_year + , subq_6.ds__extract_quarter AS user__ds__extract_quarter + , subq_6.ds__extract_month AS user__ds__extract_month + , subq_6.ds__extract_day AS user__ds__extract_day + , subq_6.ds__extract_dow AS user__ds__extract_dow + , subq_6.ds__extract_doy AS user__ds__extract_doy + , subq_6.created_at__day AS user__created_at__day + , subq_6.created_at__week AS user__created_at__week + , subq_6.created_at__month AS user__created_at__month + , subq_6.created_at__quarter AS user__created_at__quarter + , subq_6.created_at__year AS user__created_at__year + , subq_6.created_at__extract_year AS user__created_at__extract_year + , subq_6.created_at__extract_quarter AS user__created_at__extract_quarter + , subq_6.created_at__extract_month AS user__created_at__extract_month + , subq_6.created_at__extract_day AS user__created_at__extract_day + , subq_6.created_at__extract_dow AS user__created_at__extract_dow + , subq_6.created_at__extract_doy AS user__created_at__extract_doy + , subq_6.ds_partitioned__day AS user__ds_partitioned__day + , subq_6.ds_partitioned__week AS user__ds_partitioned__week + , subq_6.ds_partitioned__month AS user__ds_partitioned__month + , subq_6.ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_6.ds_partitioned__year AS user__ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_6.last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_6.last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_6.last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_6.last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_6.last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_6.last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_6.last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_6.last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_6.last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_6.last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_6.last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_6.last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_6.last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_6.last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_6.last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_6.bio_added_ts__second AS user__bio_added_ts__second + , subq_6.bio_added_ts__minute AS user__bio_added_ts__minute + , subq_6.bio_added_ts__hour AS user__bio_added_ts__hour + , subq_6.bio_added_ts__day AS user__bio_added_ts__day + , subq_6.bio_added_ts__week AS user__bio_added_ts__week + , subq_6.bio_added_ts__month AS user__bio_added_ts__month + , subq_6.bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_6.bio_added_ts__year AS user__bio_added_ts__year + , subq_6.bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_6.bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_6.bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_6.bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_6.bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_6.bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_6.last_login_ts__minute AS user__last_login_ts__minute + , subq_6.last_login_ts__hour AS user__last_login_ts__hour + , subq_6.last_login_ts__day AS user__last_login_ts__day + , subq_6.last_login_ts__week AS user__last_login_ts__week + , subq_6.last_login_ts__month AS user__last_login_ts__month + , subq_6.last_login_ts__quarter AS user__last_login_ts__quarter + , subq_6.last_login_ts__year AS user__last_login_ts__year + , subq_6.last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_6.last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_6.last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_6.last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_6.last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_6.last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_6.archived_at__hour AS user__archived_at__hour + , subq_6.archived_at__day AS user__archived_at__day + , subq_6.archived_at__week AS user__archived_at__week + , subq_6.archived_at__month AS user__archived_at__month + , subq_6.archived_at__quarter AS user__archived_at__quarter + , subq_6.archived_at__year AS user__archived_at__year + , subq_6.archived_at__extract_year AS user__archived_at__extract_year + , subq_6.archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_6.archived_at__extract_month AS user__archived_at__extract_month + , subq_6.archived_at__extract_day AS user__archived_at__extract_day + , subq_6.archived_at__extract_dow AS user__archived_at__extract_dow + , subq_6.archived_at__extract_doy AS user__archived_at__extract_doy + , subq_6.metric_time__day AS user__metric_time__day + , subq_6.metric_time__week AS user__metric_time__week + , subq_6.metric_time__month AS user__metric_time__month + , subq_6.metric_time__quarter AS user__metric_time__quarter + , subq_6.metric_time__year AS user__metric_time__year + , subq_6.metric_time__extract_year AS user__metric_time__extract_year + , subq_6.metric_time__extract_quarter AS user__metric_time__extract_quarter + , subq_6.metric_time__extract_month AS user__metric_time__extract_month + , subq_6.metric_time__extract_day AS user__metric_time__extract_day + , subq_6.metric_time__extract_dow AS user__metric_time__extract_dow + , subq_6.metric_time__extract_doy AS user__metric_time__extract_doy + , subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.created_at__day AS created_at__day + , subq_3.created_at__week AS created_at__week + , subq_3.created_at__month AS created_at__month + , subq_3.created_at__quarter AS created_at__quarter + , subq_3.created_at__year AS created_at__year + , subq_3.created_at__extract_year AS created_at__extract_year + , subq_3.created_at__extract_quarter AS created_at__extract_quarter + , subq_3.created_at__extract_month AS created_at__extract_month + , subq_3.created_at__extract_day AS created_at__extract_day + , subq_3.created_at__extract_dow AS created_at__extract_dow + , subq_3.created_at__extract_doy AS created_at__extract_doy + , subq_3.listing__ds__day AS listing__ds__day + , subq_3.listing__ds__week AS listing__ds__week + , subq_3.listing__ds__month AS listing__ds__month + , subq_3.listing__ds__quarter AS listing__ds__quarter + , subq_3.listing__ds__year AS listing__ds__year + , subq_3.listing__ds__extract_year AS listing__ds__extract_year + , subq_3.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_3.listing__ds__extract_month AS listing__ds__extract_month + , subq_3.listing__ds__extract_day AS listing__ds__extract_day + , subq_3.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_3.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_3.listing__created_at__day AS listing__created_at__day + , subq_3.listing__created_at__week AS listing__created_at__week + , subq_3.listing__created_at__month AS listing__created_at__month + , subq_3.listing__created_at__quarter AS listing__created_at__quarter + , subq_3.listing__created_at__year AS listing__created_at__year + , subq_3.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_3.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_3.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_3.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_3.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_3.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_3.metric_time__week AS metric_time__week + , subq_3.metric_time__month AS metric_time__month + , subq_3.metric_time__quarter AS metric_time__quarter + , subq_3.metric_time__year AS metric_time__year + , subq_3.metric_time__extract_year AS metric_time__extract_year + , subq_3.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_3.metric_time__extract_month AS metric_time__extract_month + , subq_3.metric_time__extract_day AS metric_time__extract_day + , subq_3.metric_time__extract_dow AS metric_time__extract_dow + , subq_3.metric_time__extract_doy AS metric_time__extract_doy + , subq_3.listing AS listing + , subq_3.user AS user + , subq_3.listing__user AS listing__user + , subq_3.country_latest AS country_latest + , subq_3.is_lux_latest AS is_lux_latest + , subq_3.capacity_latest AS capacity_latest + , subq_3.listing__country_latest AS listing__country_latest + , subq_3.listing__is_lux_latest AS listing__is_lux_latest + , subq_3.listing__capacity_latest AS listing__capacity_latest + , subq_3.listings AS listings + , subq_3.largest_listing AS largest_listing + , subq_3.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'home_state', + -- 'user__home_state', + -- 'ds__day', + -- 'ds__week', + -- 'ds__month', + -- 'ds__quarter', + -- 'ds__year', + -- 'ds__extract_year', + -- 'ds__extract_quarter', + -- 'ds__extract_month', + -- 'ds__extract_day', + -- 'ds__extract_dow', + -- 'ds__extract_doy', + -- 'created_at__day', + -- 'created_at__week', + -- 'created_at__month', + -- 'created_at__quarter', + -- 'created_at__year', + -- 'created_at__extract_year', + -- 'created_at__extract_quarter', + -- 'created_at__extract_month', + -- 'created_at__extract_day', + -- 'created_at__extract_dow', + -- 'created_at__extract_doy', + -- 'ds_partitioned__day', + -- 'ds_partitioned__week', + -- 'ds_partitioned__month', + -- 'ds_partitioned__quarter', + -- 'ds_partitioned__year', + -- 'ds_partitioned__extract_year', + -- 'ds_partitioned__extract_quarter', + -- 'ds_partitioned__extract_month', + -- 'ds_partitioned__extract_day', + -- 'ds_partitioned__extract_dow', + -- 'ds_partitioned__extract_doy', + -- 'last_profile_edit_ts__millisecond', + -- 'last_profile_edit_ts__second', + -- 'last_profile_edit_ts__minute', + -- 'last_profile_edit_ts__hour', + -- 'last_profile_edit_ts__day', + -- 'last_profile_edit_ts__week', + -- 'last_profile_edit_ts__month', + -- 'last_profile_edit_ts__quarter', + -- 'last_profile_edit_ts__year', + -- 'last_profile_edit_ts__extract_year', + -- 'last_profile_edit_ts__extract_quarter', + -- 'last_profile_edit_ts__extract_month', + -- 'last_profile_edit_ts__extract_day', + -- 'last_profile_edit_ts__extract_dow', + -- 'last_profile_edit_ts__extract_doy', + -- 'bio_added_ts__second', + -- 'bio_added_ts__minute', + -- 'bio_added_ts__hour', + -- 'bio_added_ts__day', + -- 'bio_added_ts__week', + -- 'bio_added_ts__month', + -- 'bio_added_ts__quarter', + -- 'bio_added_ts__year', + -- 'bio_added_ts__extract_year', + -- 'bio_added_ts__extract_quarter', + -- 'bio_added_ts__extract_month', + -- 'bio_added_ts__extract_day', + -- 'bio_added_ts__extract_dow', + -- 'bio_added_ts__extract_doy', + -- 'last_login_ts__minute', + -- 'last_login_ts__hour', + -- 'last_login_ts__day', + -- 'last_login_ts__week', + -- 'last_login_ts__month', + -- 'last_login_ts__quarter', + -- 'last_login_ts__year', + -- 'last_login_ts__extract_year', + -- 'last_login_ts__extract_quarter', + -- 'last_login_ts__extract_month', + -- 'last_login_ts__extract_day', + -- 'last_login_ts__extract_dow', + -- 'last_login_ts__extract_doy', + -- 'archived_at__hour', + -- 'archived_at__day', + -- 'archived_at__week', + -- 'archived_at__month', + -- 'archived_at__quarter', + -- 'archived_at__year', + -- 'archived_at__extract_year', + -- 'archived_at__extract_quarter', + -- 'archived_at__extract_month', + -- 'archived_at__extract_day', + -- 'archived_at__extract_dow', + -- 'archived_at__extract_doy', + -- 'user__ds__day', + -- 'user__ds__week', + -- 'user__ds__month', + -- 'user__ds__quarter', + -- 'user__ds__year', + -- 'user__ds__extract_year', + -- 'user__ds__extract_quarter', + -- 'user__ds__extract_month', + -- 'user__ds__extract_day', + -- 'user__ds__extract_dow', + -- 'user__ds__extract_doy', + -- 'user__created_at__day', + -- 'user__created_at__week', + -- 'user__created_at__month', + -- 'user__created_at__quarter', + -- 'user__created_at__year', + -- 'user__created_at__extract_year', + -- 'user__created_at__extract_quarter', + -- 'user__created_at__extract_month', + -- 'user__created_at__extract_day', + -- 'user__created_at__extract_dow', + -- 'user__created_at__extract_doy', + -- 'user__ds_partitioned__day', + -- 'user__ds_partitioned__week', + -- 'user__ds_partitioned__month', + -- 'user__ds_partitioned__quarter', + -- 'user__ds_partitioned__year', + -- 'user__ds_partitioned__extract_year', + -- 'user__ds_partitioned__extract_quarter', + -- 'user__ds_partitioned__extract_month', + -- 'user__ds_partitioned__extract_day', + -- 'user__ds_partitioned__extract_dow', + -- 'user__ds_partitioned__extract_doy', + -- 'user__last_profile_edit_ts__millisecond', + -- 'user__last_profile_edit_ts__second', + -- 'user__last_profile_edit_ts__minute', + -- 'user__last_profile_edit_ts__hour', + -- 'user__last_profile_edit_ts__day', + -- 'user__last_profile_edit_ts__week', + -- 'user__last_profile_edit_ts__month', + -- 'user__last_profile_edit_ts__quarter', + -- 'user__last_profile_edit_ts__year', + -- 'user__last_profile_edit_ts__extract_year', + -- 'user__last_profile_edit_ts__extract_quarter', + -- 'user__last_profile_edit_ts__extract_month', + -- 'user__last_profile_edit_ts__extract_day', + -- 'user__last_profile_edit_ts__extract_dow', + -- 'user__last_profile_edit_ts__extract_doy', + -- 'user__bio_added_ts__second', + -- 'user__bio_added_ts__minute', + -- 'user__bio_added_ts__hour', + -- 'user__bio_added_ts__day', + -- 'user__bio_added_ts__week', + -- 'user__bio_added_ts__month', + -- 'user__bio_added_ts__quarter', + -- 'user__bio_added_ts__year', + -- 'user__bio_added_ts__extract_year', + -- 'user__bio_added_ts__extract_quarter', + -- 'user__bio_added_ts__extract_month', + -- 'user__bio_added_ts__extract_day', + -- 'user__bio_added_ts__extract_dow', + -- 'user__bio_added_ts__extract_doy', + -- 'user__last_login_ts__minute', + -- 'user__last_login_ts__hour', + -- 'user__last_login_ts__day', + -- 'user__last_login_ts__week', + -- 'user__last_login_ts__month', + -- 'user__last_login_ts__quarter', + -- 'user__last_login_ts__year', + -- 'user__last_login_ts__extract_year', + -- 'user__last_login_ts__extract_quarter', + -- 'user__last_login_ts__extract_month', + -- 'user__last_login_ts__extract_day', + -- 'user__last_login_ts__extract_dow', + -- 'user__last_login_ts__extract_doy', + -- 'user__archived_at__hour', + -- 'user__archived_at__day', + -- 'user__archived_at__week', + -- 'user__archived_at__month', + -- 'user__archived_at__quarter', + -- 'user__archived_at__year', + -- 'user__archived_at__extract_year', + -- 'user__archived_at__extract_quarter', + -- 'user__archived_at__extract_month', + -- 'user__archived_at__extract_day', + -- 'user__archived_at__extract_dow', + -- 'user__archived_at__extract_doy', + -- 'metric_time__day', + -- 'metric_time__week', + -- 'metric_time__month', + -- 'metric_time__quarter', + -- 'metric_time__year', + -- 'metric_time__extract_year', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_month', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'user', + -- ] + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.created_at__day + , subq_5.created_at__week + , subq_5.created_at__month + , subq_5.created_at__quarter + , subq_5.created_at__year + , subq_5.created_at__extract_year + , subq_5.created_at__extract_quarter + , subq_5.created_at__extract_month + , subq_5.created_at__extract_day + , subq_5.created_at__extract_dow + , subq_5.created_at__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.last_profile_edit_ts__millisecond + , subq_5.last_profile_edit_ts__second + , subq_5.last_profile_edit_ts__minute + , subq_5.last_profile_edit_ts__hour + , subq_5.last_profile_edit_ts__day + , subq_5.last_profile_edit_ts__week + , subq_5.last_profile_edit_ts__month + , subq_5.last_profile_edit_ts__quarter + , subq_5.last_profile_edit_ts__year + , subq_5.last_profile_edit_ts__extract_year + , subq_5.last_profile_edit_ts__extract_quarter + , subq_5.last_profile_edit_ts__extract_month + , subq_5.last_profile_edit_ts__extract_day + , subq_5.last_profile_edit_ts__extract_dow + , subq_5.last_profile_edit_ts__extract_doy + , subq_5.bio_added_ts__second + , subq_5.bio_added_ts__minute + , subq_5.bio_added_ts__hour + , subq_5.bio_added_ts__day + , subq_5.bio_added_ts__week + , subq_5.bio_added_ts__month + , subq_5.bio_added_ts__quarter + , subq_5.bio_added_ts__year + , subq_5.bio_added_ts__extract_year + , subq_5.bio_added_ts__extract_quarter + , subq_5.bio_added_ts__extract_month + , subq_5.bio_added_ts__extract_day + , subq_5.bio_added_ts__extract_dow + , subq_5.bio_added_ts__extract_doy + , subq_5.last_login_ts__minute + , subq_5.last_login_ts__hour + , subq_5.last_login_ts__day + , subq_5.last_login_ts__week + , subq_5.last_login_ts__month + , subq_5.last_login_ts__quarter + , subq_5.last_login_ts__year + , subq_5.last_login_ts__extract_year + , subq_5.last_login_ts__extract_quarter + , subq_5.last_login_ts__extract_month + , subq_5.last_login_ts__extract_day + , subq_5.last_login_ts__extract_dow + , subq_5.last_login_ts__extract_doy + , subq_5.archived_at__hour + , subq_5.archived_at__day + , subq_5.archived_at__week + , subq_5.archived_at__month + , subq_5.archived_at__quarter + , subq_5.archived_at__year + , subq_5.archived_at__extract_year + , subq_5.archived_at__extract_quarter + , subq_5.archived_at__extract_month + , subq_5.archived_at__extract_day + , subq_5.archived_at__extract_dow + , subq_5.archived_at__extract_doy + , subq_5.user__ds__day + , subq_5.user__ds__week + , subq_5.user__ds__month + , subq_5.user__ds__quarter + , subq_5.user__ds__year + , subq_5.user__ds__extract_year + , subq_5.user__ds__extract_quarter + , subq_5.user__ds__extract_month + , subq_5.user__ds__extract_day + , subq_5.user__ds__extract_dow + , subq_5.user__ds__extract_doy + , subq_5.user__created_at__day + , subq_5.user__created_at__week + , subq_5.user__created_at__month + , subq_5.user__created_at__quarter + , subq_5.user__created_at__year + , subq_5.user__created_at__extract_year + , subq_5.user__created_at__extract_quarter + , subq_5.user__created_at__extract_month + , subq_5.user__created_at__extract_day + , subq_5.user__created_at__extract_dow + , subq_5.user__created_at__extract_doy + , subq_5.user__ds_partitioned__day + , subq_5.user__ds_partitioned__week + , subq_5.user__ds_partitioned__month + , subq_5.user__ds_partitioned__quarter + , subq_5.user__ds_partitioned__year + , subq_5.user__ds_partitioned__extract_year + , subq_5.user__ds_partitioned__extract_quarter + , subq_5.user__ds_partitioned__extract_month + , subq_5.user__ds_partitioned__extract_day + , subq_5.user__ds_partitioned__extract_dow + , subq_5.user__ds_partitioned__extract_doy + , subq_5.user__last_profile_edit_ts__millisecond + , subq_5.user__last_profile_edit_ts__second + , subq_5.user__last_profile_edit_ts__minute + , subq_5.user__last_profile_edit_ts__hour + , subq_5.user__last_profile_edit_ts__day + , subq_5.user__last_profile_edit_ts__week + , subq_5.user__last_profile_edit_ts__month + , subq_5.user__last_profile_edit_ts__quarter + , subq_5.user__last_profile_edit_ts__year + , subq_5.user__last_profile_edit_ts__extract_year + , subq_5.user__last_profile_edit_ts__extract_quarter + , subq_5.user__last_profile_edit_ts__extract_month + , subq_5.user__last_profile_edit_ts__extract_day + , subq_5.user__last_profile_edit_ts__extract_dow + , subq_5.user__last_profile_edit_ts__extract_doy + , subq_5.user__bio_added_ts__second + , subq_5.user__bio_added_ts__minute + , subq_5.user__bio_added_ts__hour + , subq_5.user__bio_added_ts__day + , subq_5.user__bio_added_ts__week + , subq_5.user__bio_added_ts__month + , subq_5.user__bio_added_ts__quarter + , subq_5.user__bio_added_ts__year + , subq_5.user__bio_added_ts__extract_year + , subq_5.user__bio_added_ts__extract_quarter + , subq_5.user__bio_added_ts__extract_month + , subq_5.user__bio_added_ts__extract_day + , subq_5.user__bio_added_ts__extract_dow + , subq_5.user__bio_added_ts__extract_doy + , subq_5.user__last_login_ts__minute + , subq_5.user__last_login_ts__hour + , subq_5.user__last_login_ts__day + , subq_5.user__last_login_ts__week + , subq_5.user__last_login_ts__month + , subq_5.user__last_login_ts__quarter + , subq_5.user__last_login_ts__year + , subq_5.user__last_login_ts__extract_year + , subq_5.user__last_login_ts__extract_quarter + , subq_5.user__last_login_ts__extract_month + , subq_5.user__last_login_ts__extract_day + , subq_5.user__last_login_ts__extract_dow + , subq_5.user__last_login_ts__extract_doy + , subq_5.user__archived_at__hour + , subq_5.user__archived_at__day + , subq_5.user__archived_at__week + , subq_5.user__archived_at__month + , subq_5.user__archived_at__quarter + , subq_5.user__archived_at__year + , subq_5.user__archived_at__extract_year + , subq_5.user__archived_at__extract_quarter + , subq_5.user__archived_at__extract_month + , subq_5.user__archived_at__extract_day + , subq_5.user__archived_at__extract_dow + , subq_5.user__archived_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.user + , subq_5.home_state + , subq_5.user__home_state + FROM ( + -- Metric Time Dimension 'created_at' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.created_at__day + , subq_4.created_at__week + , subq_4.created_at__month + , subq_4.created_at__quarter + , subq_4.created_at__year + , subq_4.created_at__extract_year + , subq_4.created_at__extract_quarter + , subq_4.created_at__extract_month + , subq_4.created_at__extract_day + , subq_4.created_at__extract_dow + , subq_4.created_at__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.last_profile_edit_ts__millisecond + , subq_4.last_profile_edit_ts__second + , subq_4.last_profile_edit_ts__minute + , subq_4.last_profile_edit_ts__hour + , subq_4.last_profile_edit_ts__day + , subq_4.last_profile_edit_ts__week + , subq_4.last_profile_edit_ts__month + , subq_4.last_profile_edit_ts__quarter + , subq_4.last_profile_edit_ts__year + , subq_4.last_profile_edit_ts__extract_year + , subq_4.last_profile_edit_ts__extract_quarter + , subq_4.last_profile_edit_ts__extract_month + , subq_4.last_profile_edit_ts__extract_day + , subq_4.last_profile_edit_ts__extract_dow + , subq_4.last_profile_edit_ts__extract_doy + , subq_4.bio_added_ts__second + , subq_4.bio_added_ts__minute + , subq_4.bio_added_ts__hour + , subq_4.bio_added_ts__day + , subq_4.bio_added_ts__week + , subq_4.bio_added_ts__month + , subq_4.bio_added_ts__quarter + , subq_4.bio_added_ts__year + , subq_4.bio_added_ts__extract_year + , subq_4.bio_added_ts__extract_quarter + , subq_4.bio_added_ts__extract_month + , subq_4.bio_added_ts__extract_day + , subq_4.bio_added_ts__extract_dow + , subq_4.bio_added_ts__extract_doy + , subq_4.last_login_ts__minute + , subq_4.last_login_ts__hour + , subq_4.last_login_ts__day + , subq_4.last_login_ts__week + , subq_4.last_login_ts__month + , subq_4.last_login_ts__quarter + , subq_4.last_login_ts__year + , subq_4.last_login_ts__extract_year + , subq_4.last_login_ts__extract_quarter + , subq_4.last_login_ts__extract_month + , subq_4.last_login_ts__extract_day + , subq_4.last_login_ts__extract_dow + , subq_4.last_login_ts__extract_doy + , subq_4.archived_at__hour + , subq_4.archived_at__day + , subq_4.archived_at__week + , subq_4.archived_at__month + , subq_4.archived_at__quarter + , subq_4.archived_at__year + , subq_4.archived_at__extract_year + , subq_4.archived_at__extract_quarter + , subq_4.archived_at__extract_month + , subq_4.archived_at__extract_day + , subq_4.archived_at__extract_dow + , subq_4.archived_at__extract_doy + , subq_4.user__ds__day + , subq_4.user__ds__week + , subq_4.user__ds__month + , subq_4.user__ds__quarter + , subq_4.user__ds__year + , subq_4.user__ds__extract_year + , subq_4.user__ds__extract_quarter + , subq_4.user__ds__extract_month + , subq_4.user__ds__extract_day + , subq_4.user__ds__extract_dow + , subq_4.user__ds__extract_doy + , subq_4.user__created_at__day + , subq_4.user__created_at__week + , subq_4.user__created_at__month + , subq_4.user__created_at__quarter + , subq_4.user__created_at__year + , subq_4.user__created_at__extract_year + , subq_4.user__created_at__extract_quarter + , subq_4.user__created_at__extract_month + , subq_4.user__created_at__extract_day + , subq_4.user__created_at__extract_dow + , subq_4.user__created_at__extract_doy + , subq_4.user__ds_partitioned__day + , subq_4.user__ds_partitioned__week + , subq_4.user__ds_partitioned__month + , subq_4.user__ds_partitioned__quarter + , subq_4.user__ds_partitioned__year + , subq_4.user__ds_partitioned__extract_year + , subq_4.user__ds_partitioned__extract_quarter + , subq_4.user__ds_partitioned__extract_month + , subq_4.user__ds_partitioned__extract_day + , subq_4.user__ds_partitioned__extract_dow + , subq_4.user__ds_partitioned__extract_doy + , subq_4.user__last_profile_edit_ts__millisecond + , subq_4.user__last_profile_edit_ts__second + , subq_4.user__last_profile_edit_ts__minute + , subq_4.user__last_profile_edit_ts__hour + , subq_4.user__last_profile_edit_ts__day + , subq_4.user__last_profile_edit_ts__week + , subq_4.user__last_profile_edit_ts__month + , subq_4.user__last_profile_edit_ts__quarter + , subq_4.user__last_profile_edit_ts__year + , subq_4.user__last_profile_edit_ts__extract_year + , subq_4.user__last_profile_edit_ts__extract_quarter + , subq_4.user__last_profile_edit_ts__extract_month + , subq_4.user__last_profile_edit_ts__extract_day + , subq_4.user__last_profile_edit_ts__extract_dow + , subq_4.user__last_profile_edit_ts__extract_doy + , subq_4.user__bio_added_ts__second + , subq_4.user__bio_added_ts__minute + , subq_4.user__bio_added_ts__hour + , subq_4.user__bio_added_ts__day + , subq_4.user__bio_added_ts__week + , subq_4.user__bio_added_ts__month + , subq_4.user__bio_added_ts__quarter + , subq_4.user__bio_added_ts__year + , subq_4.user__bio_added_ts__extract_year + , subq_4.user__bio_added_ts__extract_quarter + , subq_4.user__bio_added_ts__extract_month + , subq_4.user__bio_added_ts__extract_day + , subq_4.user__bio_added_ts__extract_dow + , subq_4.user__bio_added_ts__extract_doy + , subq_4.user__last_login_ts__minute + , subq_4.user__last_login_ts__hour + , subq_4.user__last_login_ts__day + , subq_4.user__last_login_ts__week + , subq_4.user__last_login_ts__month + , subq_4.user__last_login_ts__quarter + , subq_4.user__last_login_ts__year + , subq_4.user__last_login_ts__extract_year + , subq_4.user__last_login_ts__extract_quarter + , subq_4.user__last_login_ts__extract_month + , subq_4.user__last_login_ts__extract_day + , subq_4.user__last_login_ts__extract_dow + , subq_4.user__last_login_ts__extract_doy + , subq_4.user__archived_at__hour + , subq_4.user__archived_at__day + , subq_4.user__archived_at__week + , subq_4.user__archived_at__month + , subq_4.user__archived_at__quarter + , subq_4.user__archived_at__year + , subq_4.user__archived_at__extract_year + , subq_4.user__archived_at__extract_quarter + , subq_4.user__archived_at__extract_month + , subq_4.user__archived_at__extract_day + , subq_4.user__archived_at__extract_dow + , subq_4.user__archived_at__extract_doy + , subq_4.created_at__day AS metric_time__day + , subq_4.created_at__week AS metric_time__week + , subq_4.created_at__month AS metric_time__month + , subq_4.created_at__quarter AS metric_time__quarter + , subq_4.created_at__year AS metric_time__year + , subq_4.created_at__extract_year AS metric_time__extract_year + , subq_4.created_at__extract_quarter AS metric_time__extract_quarter + , subq_4.created_at__extract_month AS metric_time__extract_month + , subq_4.created_at__extract_day AS metric_time__extract_day + , subq_4.created_at__extract_dow AS metric_time__extract_dow + , subq_4.created_at__extract_doy AS metric_time__extract_doy + , subq_4.user + , subq_4.home_state + , subq_4.user__home_state + , subq_4.new_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_3.user = subq_6.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + ( + subq_1.listing = subq_8.listing + ) AND ( + subq_1.ds_partitioned__day = subq_8.user__ds_partitioned__day + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.listing__user__bio_added_ts__minute + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..5448684cb4 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_simple_metric_with_joined_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['bookings', 'listing__user__bio_added_ts__minute'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_20.user__bio_added_ts__minute AS listing__user__bio_added_ts__minute + , SUM(subq_13.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_13 +LEFT OUTER JOIN +( + -- Join Standard Outputs + -- Pass Only Elements: ['user__ds_partitioned__day', 'user__bio_added_ts__minute', 'listing'] + SELECT + DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , listings_latest_src_28000.listing_id AS listing + FROM ***************************.dim_listings_latest listings_latest_src_28000 + LEFT OUTER JOIN + ***************************.dim_users users_ds_source_src_28000 + ON + listings_latest_src_28000.user_id = users_ds_source_src_28000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +ON + ( + subq_13.listing = subq_20.listing + ) AND ( + subq_13.ds_partitioned__day = subq_20.user__ds_partitioned__day + ) +GROUP BY + subq_20.user__bio_added_ts__minute +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql new file mode 100644 index 0000000000..b5b0bead27 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql @@ -0,0 +1,404 @@ +test_name: test_simple_metric_with_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.user__archived_at__hour + , subq_3.new_users +FROM ( + -- Aggregate Measures + SELECT + subq_2.user__archived_at__hour + , SUM(subq_2.new_users) AS new_users + FROM ( + -- Pass Only Elements: ['new_users', 'user__archived_at__hour'] + SELECT + subq_1.user__archived_at__hour + , subq_1.new_users + FROM ( + -- Metric Time Dimension 'created_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.created_at__day AS metric_time__day + , subq_0.created_at__week AS metric_time__week + , subq_0.created_at__month AS metric_time__month + , subq_0.created_at__quarter AS metric_time__quarter + , subq_0.created_at__year AS metric_time__year + , subq_0.created_at__extract_year AS metric_time__extract_year + , subq_0.created_at__extract_quarter AS metric_time__extract_quarter + , subq_0.created_at__extract_month AS metric_time__extract_month + , subq_0.created_at__extract_day AS metric_time__extract_day + , subq_0.created_at__extract_dow AS metric_time__extract_dow + , subq_0.created_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.new_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.user__archived_at__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..680ed70944 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_simple_metric_with_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + user__archived_at__hour + , SUM(new_users) AS new_users +FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'created_at' + -- Pass Only Elements: ['new_users', 'user__archived_at__hour'] + SELECT + DATE_TRUNC('hour', archived_at) AS user__archived_at__hour + , 1 AS new_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + user__archived_at__hour +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql new file mode 100644 index 0000000000..02f4644c5e --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql @@ -0,0 +1,222 @@ +test_name: test_simple_query_with_date_part +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.metric_time__extract_dow + , subq_3.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__extract_dow + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + SELECT + subq_1.metric_time__extract_dow + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__extract_dow + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql new file mode 100644 index 0000000000..c006f8e506 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_simple_query_with_date_part +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__extract_dow + , SUM(bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] + SELECT + EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + metric_time__extract_dow +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql new file mode 100644 index 0000000000..d5ad5bbae9 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql @@ -0,0 +1,250 @@ +test_name: test_simple_query_with_multiple_date_parts +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.metric_time__extract_year + , subq_3.metric_time__extract_quarter + , subq_3.metric_time__extract_month + , subq_3.metric_time__extract_day + , subq_3.metric_time__extract_dow + , subq_3.metric_time__extract_doy + , subq_3.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: [ + -- 'bookings', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'metric_time__extract_month', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_year', + -- ] + SELECT + subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__extract_year + , subq_2.metric_time__extract_quarter + , subq_2.metric_time__extract_month + , subq_2.metric_time__extract_day + , subq_2.metric_time__extract_dow + , subq_2.metric_time__extract_doy + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql new file mode 100644 index 0000000000..dcf3861e38 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_simple_query_with_multiple_date_parts +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__extract_year + , metric_time__extract_quarter + , metric_time__extract_month + , metric_time__extract_day + , metric_time__extract_dow + , metric_time__extract_doy + , SUM(bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: [ + -- 'bookings', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'metric_time__extract_month', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_year', + -- ] + SELECT + EXTRACT(toYear FROM ds) AS metric_time__extract_year + , EXTRACT(toQuarter FROM ds) AS metric_time__extract_quarter + , EXTRACT(toMonth FROM ds) AS metric_time__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS metric_time__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS metric_time__extract_doy + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + metric_time__extract_year + , metric_time__extract_quarter + , metric_time__extract_month + , metric_time__extract_day + , metric_time__extract_dow + , metric_time__extract_doy +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql new file mode 100644 index 0000000000..090c7bd28d --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql @@ -0,0 +1,195 @@ +test_name: test_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__bio_added_ts__second',] +SELECT + subq_0.user__bio_added_ts__second +FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +GROUP BY + subq_0.user__bio_added_ts__second +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..486afed97c --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql @@ -0,0 +1,12 @@ +test_name: test_sub_daily_dimension +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'users_ds_source' +-- Pass Only Elements: ['user__bio_added_ts__second',] +SELECT + DATE_TRUNC('second', bio_added_ts) AS user__bio_added_ts__second +FROM ***************************.dim_users users_ds_source_src_28000 +GROUP BY + DATE_TRUNC('second', bio_added_ts) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql new file mode 100644 index 0000000000..f128c4f788 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql @@ -0,0 +1,66 @@ +test_name: test_sub_daily_metric_time +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__millisecond',] +SELECT + subq_1.metric_time__millisecond +FROM ( + -- Metric Time Dimension 'ts' + SELECT + subq_0.ts__millisecond + , subq_0.ts__second + , subq_0.ts__minute + , subq_0.ts__hour + , subq_0.ts__day + , subq_0.ts__week + , subq_0.ts__month + , subq_0.ts__quarter + , subq_0.ts__year + , subq_0.ts__extract_year + , subq_0.ts__extract_quarter + , subq_0.ts__extract_month + , subq_0.ts__extract_day + , subq_0.ts__extract_dow + , subq_0.ts__extract_doy + , subq_0.ts__millisecond AS metric_time__millisecond + , subq_0.ts__second AS metric_time__second + , subq_0.ts__minute AS metric_time__minute + , subq_0.ts__hour AS metric_time__hour + , subq_0.ts__day AS metric_time__day + , subq_0.ts__week AS metric_time__week + , subq_0.ts__month AS metric_time__month + , subq_0.ts__quarter AS metric_time__quarter + , subq_0.ts__year AS metric_time__year + , subq_0.ts__extract_year AS metric_time__extract_year + , subq_0.ts__extract_quarter AS metric_time__extract_quarter + , subq_0.ts__extract_month AS metric_time__extract_month + , subq_0.ts__extract_day AS metric_time__extract_day + , subq_0.ts__extract_dow AS metric_time__extract_dow + , subq_0.ts__extract_doy AS metric_time__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_millisecond' + SELECT + time_spine_src_28002.ts AS ts__millisecond + , DATE_TRUNC('second', time_spine_src_28002.ts) AS ts__second + , DATE_TRUNC('minute', time_spine_src_28002.ts) AS ts__minute + , DATE_TRUNC('hour', time_spine_src_28002.ts) AS ts__hour + , DATE_TRUNC('day', time_spine_src_28002.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28002.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28002.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28002.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28002.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28002.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28002.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28002.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28002.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28002.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28002.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_millisecond time_spine_src_28002 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +GROUP BY + subq_1.metric_time__millisecond +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..cfe5e81e99 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql @@ -0,0 +1,13 @@ +test_name: test_sub_daily_metric_time +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Read From Time Spine 'mf_time_spine_millisecond' +-- Metric Time Dimension 'ts' +-- Pass Only Elements: ['metric_time__millisecond',] +SELECT + ts AS metric_time__millisecond +FROM ***************************.mf_time_spine_millisecond time_spine_src_28002 +GROUP BY + ts +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql new file mode 100644 index 0000000000..c87ca553da --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql @@ -0,0 +1,608 @@ +test_name: test_subdaily_cumulative_grain_to_date_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.metric_time__hour + , subq_6.archived_users AS subdaily_cumulative_grain_to_date_metric +FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__hour + , SUM(subq_5.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_4.metric_time__hour + , subq_4.archived_users + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__hour AS metric_time__hour + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond AS last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second AS last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute AS last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour AS last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day AS last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week AS last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month AS last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter AS last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year AS last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year AS last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter AS last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month AS last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day AS last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow AS last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy AS last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second AS bio_added_ts__second + , subq_1.bio_added_ts__minute AS bio_added_ts__minute + , subq_1.bio_added_ts__hour AS bio_added_ts__hour + , subq_1.bio_added_ts__day AS bio_added_ts__day + , subq_1.bio_added_ts__week AS bio_added_ts__week + , subq_1.bio_added_ts__month AS bio_added_ts__month + , subq_1.bio_added_ts__quarter AS bio_added_ts__quarter + , subq_1.bio_added_ts__year AS bio_added_ts__year + , subq_1.bio_added_ts__extract_year AS bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter AS bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month AS bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day AS bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow AS bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy AS bio_added_ts__extract_doy + , subq_1.last_login_ts__minute AS last_login_ts__minute + , subq_1.last_login_ts__hour AS last_login_ts__hour + , subq_1.last_login_ts__day AS last_login_ts__day + , subq_1.last_login_ts__week AS last_login_ts__week + , subq_1.last_login_ts__month AS last_login_ts__month + , subq_1.last_login_ts__quarter AS last_login_ts__quarter + , subq_1.last_login_ts__year AS last_login_ts__year + , subq_1.last_login_ts__extract_year AS last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter AS last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month AS last_login_ts__extract_month + , subq_1.last_login_ts__extract_day AS last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow AS last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy AS last_login_ts__extract_doy + , subq_1.archived_at__hour AS archived_at__hour + , subq_1.archived_at__day AS archived_at__day + , subq_1.archived_at__week AS archived_at__week + , subq_1.archived_at__month AS archived_at__month + , subq_1.archived_at__quarter AS archived_at__quarter + , subq_1.archived_at__year AS archived_at__year + , subq_1.archived_at__extract_year AS archived_at__extract_year + , subq_1.archived_at__extract_quarter AS archived_at__extract_quarter + , subq_1.archived_at__extract_month AS archived_at__extract_month + , subq_1.archived_at__extract_day AS archived_at__extract_day + , subq_1.archived_at__extract_dow AS archived_at__extract_dow + , subq_1.archived_at__extract_doy AS archived_at__extract_doy + , subq_1.user__ds__day AS user__ds__day + , subq_1.user__ds__week AS user__ds__week + , subq_1.user__ds__month AS user__ds__month + , subq_1.user__ds__quarter AS user__ds__quarter + , subq_1.user__ds__year AS user__ds__year + , subq_1.user__ds__extract_year AS user__ds__extract_year + , subq_1.user__ds__extract_quarter AS user__ds__extract_quarter + , subq_1.user__ds__extract_month AS user__ds__extract_month + , subq_1.user__ds__extract_day AS user__ds__extract_day + , subq_1.user__ds__extract_dow AS user__ds__extract_dow + , subq_1.user__ds__extract_doy AS user__ds__extract_doy + , subq_1.user__created_at__day AS user__created_at__day + , subq_1.user__created_at__week AS user__created_at__week + , subq_1.user__created_at__month AS user__created_at__month + , subq_1.user__created_at__quarter AS user__created_at__quarter + , subq_1.user__created_at__year AS user__created_at__year + , subq_1.user__created_at__extract_year AS user__created_at__extract_year + , subq_1.user__created_at__extract_quarter AS user__created_at__extract_quarter + , subq_1.user__created_at__extract_month AS user__created_at__extract_month + , subq_1.user__created_at__extract_day AS user__created_at__extract_day + , subq_1.user__created_at__extract_dow AS user__created_at__extract_dow + , subq_1.user__created_at__extract_doy AS user__created_at__extract_doy + , subq_1.user__ds_partitioned__day AS user__ds_partitioned__day + , subq_1.user__ds_partitioned__week AS user__ds_partitioned__week + , subq_1.user__ds_partitioned__month AS user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year AS user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second AS user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute AS user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour AS user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day AS user__bio_added_ts__day + , subq_1.user__bio_added_ts__week AS user__bio_added_ts__week + , subq_1.user__bio_added_ts__month AS user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year AS user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute AS user__last_login_ts__minute + , subq_1.user__last_login_ts__hour AS user__last_login_ts__hour + , subq_1.user__last_login_ts__day AS user__last_login_ts__day + , subq_1.user__last_login_ts__week AS user__last_login_ts__week + , subq_1.user__last_login_ts__month AS user__last_login_ts__month + , subq_1.user__last_login_ts__quarter AS user__last_login_ts__quarter + , subq_1.user__last_login_ts__year AS user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour AS user__archived_at__hour + , subq_1.user__archived_at__day AS user__archived_at__day + , subq_1.user__archived_at__week AS user__archived_at__week + , subq_1.user__archived_at__month AS user__archived_at__month + , subq_1.user__archived_at__quarter AS user__archived_at__quarter + , subq_1.user__archived_at__year AS user__archived_at__year + , subq_1.user__archived_at__extract_year AS user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month AS user__archived_at__extract_month + , subq_1.user__archived_at__extract_day AS user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow AS user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy AS user__archived_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.home_state AS home_state + , subq_1.user__home_state AS user__home_state + , subq_1.archived_users AS archived_users + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + subq_3.ts AS metric_time__hour + FROM ***************************.mf_time_spine_hour subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql new file mode 100644 index 0000000000..8235bf9d95 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql @@ -0,0 +1,25 @@ +test_name: test_subdaily_cumulative_grain_to_date_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['archived_users', 'metric_time__hour'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_10.ts AS metric_time__hour + , SUM(subq_8.archived_users) AS subdaily_cumulative_grain_to_date_metric +FROM ***************************.mf_time_spine_hour subq_10 +CROSS JOIN +( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_10.ts +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql new file mode 100644 index 0000000000..128dc7a234 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql @@ -0,0 +1,608 @@ +test_name: test_subdaily_cumulative_window_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.metric_time__hour + , subq_6.archived_users AS subdaily_cumulative_window_metric +FROM ( + -- Aggregate Measures + SELECT + subq_5.metric_time__hour + , SUM(subq_5.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_4.metric_time__hour + , subq_4.archived_users + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__hour AS metric_time__hour + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond AS last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second AS last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute AS last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour AS last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day AS last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week AS last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month AS last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter AS last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year AS last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year AS last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter AS last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month AS last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day AS last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow AS last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy AS last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second AS bio_added_ts__second + , subq_1.bio_added_ts__minute AS bio_added_ts__minute + , subq_1.bio_added_ts__hour AS bio_added_ts__hour + , subq_1.bio_added_ts__day AS bio_added_ts__day + , subq_1.bio_added_ts__week AS bio_added_ts__week + , subq_1.bio_added_ts__month AS bio_added_ts__month + , subq_1.bio_added_ts__quarter AS bio_added_ts__quarter + , subq_1.bio_added_ts__year AS bio_added_ts__year + , subq_1.bio_added_ts__extract_year AS bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter AS bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month AS bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day AS bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow AS bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy AS bio_added_ts__extract_doy + , subq_1.last_login_ts__minute AS last_login_ts__minute + , subq_1.last_login_ts__hour AS last_login_ts__hour + , subq_1.last_login_ts__day AS last_login_ts__day + , subq_1.last_login_ts__week AS last_login_ts__week + , subq_1.last_login_ts__month AS last_login_ts__month + , subq_1.last_login_ts__quarter AS last_login_ts__quarter + , subq_1.last_login_ts__year AS last_login_ts__year + , subq_1.last_login_ts__extract_year AS last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter AS last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month AS last_login_ts__extract_month + , subq_1.last_login_ts__extract_day AS last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow AS last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy AS last_login_ts__extract_doy + , subq_1.archived_at__hour AS archived_at__hour + , subq_1.archived_at__day AS archived_at__day + , subq_1.archived_at__week AS archived_at__week + , subq_1.archived_at__month AS archived_at__month + , subq_1.archived_at__quarter AS archived_at__quarter + , subq_1.archived_at__year AS archived_at__year + , subq_1.archived_at__extract_year AS archived_at__extract_year + , subq_1.archived_at__extract_quarter AS archived_at__extract_quarter + , subq_1.archived_at__extract_month AS archived_at__extract_month + , subq_1.archived_at__extract_day AS archived_at__extract_day + , subq_1.archived_at__extract_dow AS archived_at__extract_dow + , subq_1.archived_at__extract_doy AS archived_at__extract_doy + , subq_1.user__ds__day AS user__ds__day + , subq_1.user__ds__week AS user__ds__week + , subq_1.user__ds__month AS user__ds__month + , subq_1.user__ds__quarter AS user__ds__quarter + , subq_1.user__ds__year AS user__ds__year + , subq_1.user__ds__extract_year AS user__ds__extract_year + , subq_1.user__ds__extract_quarter AS user__ds__extract_quarter + , subq_1.user__ds__extract_month AS user__ds__extract_month + , subq_1.user__ds__extract_day AS user__ds__extract_day + , subq_1.user__ds__extract_dow AS user__ds__extract_dow + , subq_1.user__ds__extract_doy AS user__ds__extract_doy + , subq_1.user__created_at__day AS user__created_at__day + , subq_1.user__created_at__week AS user__created_at__week + , subq_1.user__created_at__month AS user__created_at__month + , subq_1.user__created_at__quarter AS user__created_at__quarter + , subq_1.user__created_at__year AS user__created_at__year + , subq_1.user__created_at__extract_year AS user__created_at__extract_year + , subq_1.user__created_at__extract_quarter AS user__created_at__extract_quarter + , subq_1.user__created_at__extract_month AS user__created_at__extract_month + , subq_1.user__created_at__extract_day AS user__created_at__extract_day + , subq_1.user__created_at__extract_dow AS user__created_at__extract_dow + , subq_1.user__created_at__extract_doy AS user__created_at__extract_doy + , subq_1.user__ds_partitioned__day AS user__ds_partitioned__day + , subq_1.user__ds_partitioned__week AS user__ds_partitioned__week + , subq_1.user__ds_partitioned__month AS user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year AS user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second AS user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute AS user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour AS user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day AS user__bio_added_ts__day + , subq_1.user__bio_added_ts__week AS user__bio_added_ts__week + , subq_1.user__bio_added_ts__month AS user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year AS user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute AS user__last_login_ts__minute + , subq_1.user__last_login_ts__hour AS user__last_login_ts__hour + , subq_1.user__last_login_ts__day AS user__last_login_ts__day + , subq_1.user__last_login_ts__week AS user__last_login_ts__week + , subq_1.user__last_login_ts__month AS user__last_login_ts__month + , subq_1.user__last_login_ts__quarter AS user__last_login_ts__quarter + , subq_1.user__last_login_ts__year AS user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour AS user__archived_at__hour + , subq_1.user__archived_at__day AS user__archived_at__day + , subq_1.user__archived_at__week AS user__archived_at__week + , subq_1.user__archived_at__month AS user__archived_at__month + , subq_1.user__archived_at__quarter AS user__archived_at__quarter + , subq_1.user__archived_at__year AS user__archived_at__year + , subq_1.user__archived_at__extract_year AS user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month AS user__archived_at__extract_month + , subq_1.user__archived_at__extract_day AS user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow AS user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy AS user__archived_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.home_state AS home_state + , subq_1.user__home_state AS user__home_state + , subq_1.archived_users AS archived_users + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + subq_3.ts AS metric_time__hour + FROM ***************************.mf_time_spine_hour subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql new file mode 100644 index 0000000000..8db670f32f --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql @@ -0,0 +1,25 @@ +test_name: test_subdaily_cumulative_window_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join Self Over Time Range +-- Pass Only Elements: ['archived_users', 'metric_time__hour'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_10.ts AS metric_time__hour + , SUM(subq_8.archived_users) AS subdaily_cumulative_window_metric +FROM ***************************.mf_time_spine_hour subq_10 +CROSS JOIN +( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_10.ts +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql new file mode 100644 index 0000000000..c185ed4b0c --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql @@ -0,0 +1,456 @@ +test_name: test_subdaily_granularity_overrides_metric_default_granularity +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__hour + , subq_7.archived_users AS subdaily_join_to_time_spine_metric +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__hour AS metric_time__hour + , subq_3.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__hour',] + SELECT + subq_5.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_4.ts__hour AS metric_time__hour + , subq_4.ts__day + , subq_4.ts__week + , subq_4.ts__month + , subq_4.ts__quarter + , subq_4.ts__year + , subq_4.ts__extract_year + , subq_4.ts__extract_quarter + , subq_4.ts__extract_month + , subq_4.ts__extract_day + , subq_4.ts__extract_dow + , subq_4.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__hour + , SUM(subq_2.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_1.metric_time__hour + , subq_1.archived_users + FROM ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__hour = subq_3.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql new file mode 100644 index 0000000000..187fb12d4f --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql @@ -0,0 +1,33 @@ +test_name: test_subdaily_granularity_overrides_metric_default_granularity +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + time_spine_src_28005.ts AS metric_time__hour + , subq_11.archived_users AS subdaily_join_to_time_spine_metric +FROM ***************************.mf_time_spine_hour time_spine_src_28005 +LEFT OUTER JOIN +( + -- Aggregate Measures + SELECT + metric_time__hour + , SUM(archived_users) AS archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + time_spine_src_28005.ts = subq_11.metric_time__hour +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql new file mode 100644 index 0000000000..8a86c4b323 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql @@ -0,0 +1,456 @@ +test_name: test_subdaily_join_to_time_spine_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__hour + , subq_7.archived_users AS subdaily_join_to_time_spine_metric +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__hour AS metric_time__hour + , subq_3.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__hour',] + SELECT + subq_5.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_4.ts__hour AS metric_time__hour + , subq_4.ts__day + , subq_4.ts__week + , subq_4.ts__month + , subq_4.ts__quarter + , subq_4.ts__year + , subq_4.ts__extract_year + , subq_4.ts__extract_quarter + , subq_4.ts__extract_month + , subq_4.ts__extract_day + , subq_4.ts__extract_dow + , subq_4.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__hour + , SUM(subq_2.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_1.metric_time__hour + , subq_1.archived_users + FROM ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__hour = subq_3.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql new file mode 100644 index 0000000000..48e3219171 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql @@ -0,0 +1,33 @@ +test_name: test_subdaily_join_to_time_spine_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + time_spine_src_28005.ts AS metric_time__hour + , subq_11.archived_users AS subdaily_join_to_time_spine_metric +FROM ***************************.mf_time_spine_hour time_spine_src_28005 +LEFT OUTER JOIN +( + -- Aggregate Measures + SELECT + metric_time__hour + , SUM(archived_users) AS archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + time_spine_src_28005.ts = subq_11.metric_time__hour +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql new file mode 100644 index 0000000000..bd8238929c --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql @@ -0,0 +1,651 @@ +test_name: test_subdaily_offset_to_grain_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__hour + , archived_users AS subdaily_offset_grain_to_date_metric +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__hour + , subq_7.archived_users + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__hour + , SUM(subq_6.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_5.metric_time__hour + , subq_5.archived_users + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond AS last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second AS last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute AS last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour AS last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day AS last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week AS last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month AS last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter AS last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year AS last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year AS last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter AS last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month AS last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day AS last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow AS last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy AS last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second AS bio_added_ts__second + , subq_1.bio_added_ts__minute AS bio_added_ts__minute + , subq_1.bio_added_ts__hour AS bio_added_ts__hour + , subq_1.bio_added_ts__day AS bio_added_ts__day + , subq_1.bio_added_ts__week AS bio_added_ts__week + , subq_1.bio_added_ts__month AS bio_added_ts__month + , subq_1.bio_added_ts__quarter AS bio_added_ts__quarter + , subq_1.bio_added_ts__year AS bio_added_ts__year + , subq_1.bio_added_ts__extract_year AS bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter AS bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month AS bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day AS bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow AS bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy AS bio_added_ts__extract_doy + , subq_1.last_login_ts__minute AS last_login_ts__minute + , subq_1.last_login_ts__hour AS last_login_ts__hour + , subq_1.last_login_ts__day AS last_login_ts__day + , subq_1.last_login_ts__week AS last_login_ts__week + , subq_1.last_login_ts__month AS last_login_ts__month + , subq_1.last_login_ts__quarter AS last_login_ts__quarter + , subq_1.last_login_ts__year AS last_login_ts__year + , subq_1.last_login_ts__extract_year AS last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter AS last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month AS last_login_ts__extract_month + , subq_1.last_login_ts__extract_day AS last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow AS last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy AS last_login_ts__extract_doy + , subq_1.archived_at__hour AS archived_at__hour + , subq_1.archived_at__day AS archived_at__day + , subq_1.archived_at__week AS archived_at__week + , subq_1.archived_at__month AS archived_at__month + , subq_1.archived_at__quarter AS archived_at__quarter + , subq_1.archived_at__year AS archived_at__year + , subq_1.archived_at__extract_year AS archived_at__extract_year + , subq_1.archived_at__extract_quarter AS archived_at__extract_quarter + , subq_1.archived_at__extract_month AS archived_at__extract_month + , subq_1.archived_at__extract_day AS archived_at__extract_day + , subq_1.archived_at__extract_dow AS archived_at__extract_dow + , subq_1.archived_at__extract_doy AS archived_at__extract_doy + , subq_1.user__ds__day AS user__ds__day + , subq_1.user__ds__week AS user__ds__week + , subq_1.user__ds__month AS user__ds__month + , subq_1.user__ds__quarter AS user__ds__quarter + , subq_1.user__ds__year AS user__ds__year + , subq_1.user__ds__extract_year AS user__ds__extract_year + , subq_1.user__ds__extract_quarter AS user__ds__extract_quarter + , subq_1.user__ds__extract_month AS user__ds__extract_month + , subq_1.user__ds__extract_day AS user__ds__extract_day + , subq_1.user__ds__extract_dow AS user__ds__extract_dow + , subq_1.user__ds__extract_doy AS user__ds__extract_doy + , subq_1.user__created_at__day AS user__created_at__day + , subq_1.user__created_at__week AS user__created_at__week + , subq_1.user__created_at__month AS user__created_at__month + , subq_1.user__created_at__quarter AS user__created_at__quarter + , subq_1.user__created_at__year AS user__created_at__year + , subq_1.user__created_at__extract_year AS user__created_at__extract_year + , subq_1.user__created_at__extract_quarter AS user__created_at__extract_quarter + , subq_1.user__created_at__extract_month AS user__created_at__extract_month + , subq_1.user__created_at__extract_day AS user__created_at__extract_day + , subq_1.user__created_at__extract_dow AS user__created_at__extract_dow + , subq_1.user__created_at__extract_doy AS user__created_at__extract_doy + , subq_1.user__ds_partitioned__day AS user__ds_partitioned__day + , subq_1.user__ds_partitioned__week AS user__ds_partitioned__week + , subq_1.user__ds_partitioned__month AS user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year AS user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second AS user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute AS user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour AS user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day AS user__bio_added_ts__day + , subq_1.user__bio_added_ts__week AS user__bio_added_ts__week + , subq_1.user__bio_added_ts__month AS user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year AS user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute AS user__last_login_ts__minute + , subq_1.user__last_login_ts__hour AS user__last_login_ts__hour + , subq_1.user__last_login_ts__day AS user__last_login_ts__day + , subq_1.user__last_login_ts__week AS user__last_login_ts__week + , subq_1.user__last_login_ts__month AS user__last_login_ts__month + , subq_1.user__last_login_ts__quarter AS user__last_login_ts__quarter + , subq_1.user__last_login_ts__year AS user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour AS user__archived_at__hour + , subq_1.user__archived_at__day AS user__archived_at__day + , subq_1.user__archived_at__week AS user__archived_at__week + , subq_1.user__archived_at__month AS user__archived_at__month + , subq_1.user__archived_at__quarter AS user__archived_at__quarter + , subq_1.user__archived_at__year AS user__archived_at__year + , subq_1.user__archived_at__extract_year AS user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month AS user__archived_at__extract_month + , subq_1.user__archived_at__extract_day AS user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow AS user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy AS user__archived_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__hour AS metric_time__hour + , subq_1.user AS user + , subq_1.home_state AS home_state + , subq_1.user__home_state AS user__home_state + , subq_1.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__hour',] + SELECT + subq_3.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_2.ts__hour AS metric_time__hour + , subq_2.ts__day + , subq_2.ts__week + , subq_2.ts__month + , subq_2.ts__quarter + , subq_2.ts__year + , subq_2.ts__extract_year + , subq_2.ts__extract_quarter + , subq_2.ts__extract_month + , subq_2.ts__extract_day + , subq_2.ts__extract_dow + , subq_2.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + DATE_TRUNC('hour', subq_4.metric_time__hour) = subq_1.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql new file mode 100644 index 0000000000..ceb08e656a --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_subdaily_offset_to_grain_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__hour + , archived_users AS subdaily_offset_grain_to_date_metric +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28005.ts AS metric_time__hour + , SUM(subq_10.archived_users) AS archived_users + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + INNER JOIN + ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + DATE_TRUNC('hour', time_spine_src_28005.ts) = subq_10.metric_time__hour + GROUP BY + time_spine_src_28005.ts + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql new file mode 100644 index 0000000000..206b867a14 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql @@ -0,0 +1,651 @@ +test_name: test_subdaily_offset_window_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__hour + , archived_users AS subdaily_offset_window_metric +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_7.metric_time__hour + , subq_7.archived_users + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__hour + , SUM(subq_6.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_5.metric_time__hour + , subq_5.archived_users + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond AS last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second AS last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute AS last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour AS last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day AS last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week AS last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month AS last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter AS last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year AS last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year AS last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter AS last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month AS last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day AS last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow AS last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy AS last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second AS bio_added_ts__second + , subq_1.bio_added_ts__minute AS bio_added_ts__minute + , subq_1.bio_added_ts__hour AS bio_added_ts__hour + , subq_1.bio_added_ts__day AS bio_added_ts__day + , subq_1.bio_added_ts__week AS bio_added_ts__week + , subq_1.bio_added_ts__month AS bio_added_ts__month + , subq_1.bio_added_ts__quarter AS bio_added_ts__quarter + , subq_1.bio_added_ts__year AS bio_added_ts__year + , subq_1.bio_added_ts__extract_year AS bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter AS bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month AS bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day AS bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow AS bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy AS bio_added_ts__extract_doy + , subq_1.last_login_ts__minute AS last_login_ts__minute + , subq_1.last_login_ts__hour AS last_login_ts__hour + , subq_1.last_login_ts__day AS last_login_ts__day + , subq_1.last_login_ts__week AS last_login_ts__week + , subq_1.last_login_ts__month AS last_login_ts__month + , subq_1.last_login_ts__quarter AS last_login_ts__quarter + , subq_1.last_login_ts__year AS last_login_ts__year + , subq_1.last_login_ts__extract_year AS last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter AS last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month AS last_login_ts__extract_month + , subq_1.last_login_ts__extract_day AS last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow AS last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy AS last_login_ts__extract_doy + , subq_1.archived_at__hour AS archived_at__hour + , subq_1.archived_at__day AS archived_at__day + , subq_1.archived_at__week AS archived_at__week + , subq_1.archived_at__month AS archived_at__month + , subq_1.archived_at__quarter AS archived_at__quarter + , subq_1.archived_at__year AS archived_at__year + , subq_1.archived_at__extract_year AS archived_at__extract_year + , subq_1.archived_at__extract_quarter AS archived_at__extract_quarter + , subq_1.archived_at__extract_month AS archived_at__extract_month + , subq_1.archived_at__extract_day AS archived_at__extract_day + , subq_1.archived_at__extract_dow AS archived_at__extract_dow + , subq_1.archived_at__extract_doy AS archived_at__extract_doy + , subq_1.user__ds__day AS user__ds__day + , subq_1.user__ds__week AS user__ds__week + , subq_1.user__ds__month AS user__ds__month + , subq_1.user__ds__quarter AS user__ds__quarter + , subq_1.user__ds__year AS user__ds__year + , subq_1.user__ds__extract_year AS user__ds__extract_year + , subq_1.user__ds__extract_quarter AS user__ds__extract_quarter + , subq_1.user__ds__extract_month AS user__ds__extract_month + , subq_1.user__ds__extract_day AS user__ds__extract_day + , subq_1.user__ds__extract_dow AS user__ds__extract_dow + , subq_1.user__ds__extract_doy AS user__ds__extract_doy + , subq_1.user__created_at__day AS user__created_at__day + , subq_1.user__created_at__week AS user__created_at__week + , subq_1.user__created_at__month AS user__created_at__month + , subq_1.user__created_at__quarter AS user__created_at__quarter + , subq_1.user__created_at__year AS user__created_at__year + , subq_1.user__created_at__extract_year AS user__created_at__extract_year + , subq_1.user__created_at__extract_quarter AS user__created_at__extract_quarter + , subq_1.user__created_at__extract_month AS user__created_at__extract_month + , subq_1.user__created_at__extract_day AS user__created_at__extract_day + , subq_1.user__created_at__extract_dow AS user__created_at__extract_dow + , subq_1.user__created_at__extract_doy AS user__created_at__extract_doy + , subq_1.user__ds_partitioned__day AS user__ds_partitioned__day + , subq_1.user__ds_partitioned__week AS user__ds_partitioned__week + , subq_1.user__ds_partitioned__month AS user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter AS user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year AS user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year AS user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter AS user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month AS user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day AS user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow AS user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy AS user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond AS user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second AS user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute AS user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour AS user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day AS user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week AS user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month AS user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter AS user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year AS user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year AS user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter AS user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month AS user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day AS user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow AS user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy AS user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second AS user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute AS user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour AS user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day AS user__bio_added_ts__day + , subq_1.user__bio_added_ts__week AS user__bio_added_ts__week + , subq_1.user__bio_added_ts__month AS user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter AS user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year AS user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year AS user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter AS user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month AS user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day AS user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow AS user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy AS user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute AS user__last_login_ts__minute + , subq_1.user__last_login_ts__hour AS user__last_login_ts__hour + , subq_1.user__last_login_ts__day AS user__last_login_ts__day + , subq_1.user__last_login_ts__week AS user__last_login_ts__week + , subq_1.user__last_login_ts__month AS user__last_login_ts__month + , subq_1.user__last_login_ts__quarter AS user__last_login_ts__quarter + , subq_1.user__last_login_ts__year AS user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year AS user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter AS user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month AS user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day AS user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow AS user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy AS user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour AS user__archived_at__hour + , subq_1.user__archived_at__day AS user__archived_at__day + , subq_1.user__archived_at__week AS user__archived_at__week + , subq_1.user__archived_at__month AS user__archived_at__month + , subq_1.user__archived_at__quarter AS user__archived_at__quarter + , subq_1.user__archived_at__year AS user__archived_at__year + , subq_1.user__archived_at__extract_year AS user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter AS user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month AS user__archived_at__extract_month + , subq_1.user__archived_at__extract_day AS user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow AS user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy AS user__archived_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.metric_time__hour AS metric_time__hour + , subq_1.user AS user + , subq_1.home_state AS home_state + , subq_1.user__home_state AS user__home_state + , subq_1.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__hour',] + SELECT + subq_3.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_2.ts__hour AS metric_time__hour + , subq_2.ts__day + , subq_2.ts__week + , subq_2.ts__month + , subq_2.ts__quarter + , subq_2.ts__year + , subq_2.ts__extract_year + , subq_2.ts__extract_quarter + , subq_2.ts__extract_month + , subq_2.ts__extract_day + , subq_2.ts__extract_dow + , subq_2.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + INNER JOIN + ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + ON + addHours(subq_4.metric_time__hour, CAST(-1 AS Integer)) = subq_1.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql new file mode 100644 index 0000000000..39c7a5efca --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_subdaily_offset_window_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__hour + , archived_users AS subdaily_offset_window_metric +FROM ( + -- Join to Time Spine Dataset + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + time_spine_src_28005.ts AS metric_time__hour + , SUM(subq_10.archived_users) AS archived_users + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + INNER JOIN + ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + addHours(time_spine_src_28005.ts, CAST(-1 AS Integer)) = subq_10.metric_time__hour + GROUP BY + time_spine_src_28005.ts + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql new file mode 100644 index 0000000000..7e5dd368ed --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql @@ -0,0 +1,678 @@ +test_name: test_subdaily_time_constraint_with_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__hour + , subq_10.archived_users AS subdaily_join_to_time_spine_metric +FROM ( + -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] + SELECT + subq_9.metric_time__hour + , subq_9.archived_users + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__hour AS metric_time__hour + , subq_4.archived_users AS archived_users + FROM ( + -- Pass Only Elements: ['metric_time__hour',] + SELECT + subq_7.metric_time__hour + FROM ( + -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] + SELECT + subq_6.ts__day + , subq_6.ts__week + , subq_6.ts__month + , subq_6.ts__quarter + , subq_6.ts__year + , subq_6.ts__extract_year + , subq_6.ts__extract_quarter + , subq_6.ts__extract_month + , subq_6.ts__extract_day + , subq_6.ts__extract_dow + , subq_6.ts__extract_doy + , subq_6.metric_time__hour + FROM ( + -- Change Column Aliases + SELECT + subq_5.ts__hour AS metric_time__hour + , subq_5.ts__day + , subq_5.ts__week + , subq_5.ts__month + , subq_5.ts__quarter + , subq_5.ts__year + , subq_5.ts__extract_year + , subq_5.ts__extract_quarter + , subq_5.ts__extract_month + , subq_5.ts__extract_day + , subq_5.ts__extract_dow + , subq_5.ts__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + SELECT + time_spine_src_28005.ts AS ts__hour + , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE subq_6.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__hour + , SUM(subq_3.archived_users) AS archived_users + FROM ( + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + subq_2.metric_time__hour + , subq_2.archived_users + FROM ( + -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.created_at__day + , subq_1.created_at__week + , subq_1.created_at__month + , subq_1.created_at__quarter + , subq_1.created_at__year + , subq_1.created_at__extract_year + , subq_1.created_at__extract_quarter + , subq_1.created_at__extract_month + , subq_1.created_at__extract_day + , subq_1.created_at__extract_dow + , subq_1.created_at__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.last_profile_edit_ts__millisecond + , subq_1.last_profile_edit_ts__second + , subq_1.last_profile_edit_ts__minute + , subq_1.last_profile_edit_ts__hour + , subq_1.last_profile_edit_ts__day + , subq_1.last_profile_edit_ts__week + , subq_1.last_profile_edit_ts__month + , subq_1.last_profile_edit_ts__quarter + , subq_1.last_profile_edit_ts__year + , subq_1.last_profile_edit_ts__extract_year + , subq_1.last_profile_edit_ts__extract_quarter + , subq_1.last_profile_edit_ts__extract_month + , subq_1.last_profile_edit_ts__extract_day + , subq_1.last_profile_edit_ts__extract_dow + , subq_1.last_profile_edit_ts__extract_doy + , subq_1.bio_added_ts__second + , subq_1.bio_added_ts__minute + , subq_1.bio_added_ts__hour + , subq_1.bio_added_ts__day + , subq_1.bio_added_ts__week + , subq_1.bio_added_ts__month + , subq_1.bio_added_ts__quarter + , subq_1.bio_added_ts__year + , subq_1.bio_added_ts__extract_year + , subq_1.bio_added_ts__extract_quarter + , subq_1.bio_added_ts__extract_month + , subq_1.bio_added_ts__extract_day + , subq_1.bio_added_ts__extract_dow + , subq_1.bio_added_ts__extract_doy + , subq_1.last_login_ts__minute + , subq_1.last_login_ts__hour + , subq_1.last_login_ts__day + , subq_1.last_login_ts__week + , subq_1.last_login_ts__month + , subq_1.last_login_ts__quarter + , subq_1.last_login_ts__year + , subq_1.last_login_ts__extract_year + , subq_1.last_login_ts__extract_quarter + , subq_1.last_login_ts__extract_month + , subq_1.last_login_ts__extract_day + , subq_1.last_login_ts__extract_dow + , subq_1.last_login_ts__extract_doy + , subq_1.archived_at__hour + , subq_1.archived_at__day + , subq_1.archived_at__week + , subq_1.archived_at__month + , subq_1.archived_at__quarter + , subq_1.archived_at__year + , subq_1.archived_at__extract_year + , subq_1.archived_at__extract_quarter + , subq_1.archived_at__extract_month + , subq_1.archived_at__extract_day + , subq_1.archived_at__extract_dow + , subq_1.archived_at__extract_doy + , subq_1.user__ds__day + , subq_1.user__ds__week + , subq_1.user__ds__month + , subq_1.user__ds__quarter + , subq_1.user__ds__year + , subq_1.user__ds__extract_year + , subq_1.user__ds__extract_quarter + , subq_1.user__ds__extract_month + , subq_1.user__ds__extract_day + , subq_1.user__ds__extract_dow + , subq_1.user__ds__extract_doy + , subq_1.user__created_at__day + , subq_1.user__created_at__week + , subq_1.user__created_at__month + , subq_1.user__created_at__quarter + , subq_1.user__created_at__year + , subq_1.user__created_at__extract_year + , subq_1.user__created_at__extract_quarter + , subq_1.user__created_at__extract_month + , subq_1.user__created_at__extract_day + , subq_1.user__created_at__extract_dow + , subq_1.user__created_at__extract_doy + , subq_1.user__ds_partitioned__day + , subq_1.user__ds_partitioned__week + , subq_1.user__ds_partitioned__month + , subq_1.user__ds_partitioned__quarter + , subq_1.user__ds_partitioned__year + , subq_1.user__ds_partitioned__extract_year + , subq_1.user__ds_partitioned__extract_quarter + , subq_1.user__ds_partitioned__extract_month + , subq_1.user__ds_partitioned__extract_day + , subq_1.user__ds_partitioned__extract_dow + , subq_1.user__ds_partitioned__extract_doy + , subq_1.user__last_profile_edit_ts__millisecond + , subq_1.user__last_profile_edit_ts__second + , subq_1.user__last_profile_edit_ts__minute + , subq_1.user__last_profile_edit_ts__hour + , subq_1.user__last_profile_edit_ts__day + , subq_1.user__last_profile_edit_ts__week + , subq_1.user__last_profile_edit_ts__month + , subq_1.user__last_profile_edit_ts__quarter + , subq_1.user__last_profile_edit_ts__year + , subq_1.user__last_profile_edit_ts__extract_year + , subq_1.user__last_profile_edit_ts__extract_quarter + , subq_1.user__last_profile_edit_ts__extract_month + , subq_1.user__last_profile_edit_ts__extract_day + , subq_1.user__last_profile_edit_ts__extract_dow + , subq_1.user__last_profile_edit_ts__extract_doy + , subq_1.user__bio_added_ts__second + , subq_1.user__bio_added_ts__minute + , subq_1.user__bio_added_ts__hour + , subq_1.user__bio_added_ts__day + , subq_1.user__bio_added_ts__week + , subq_1.user__bio_added_ts__month + , subq_1.user__bio_added_ts__quarter + , subq_1.user__bio_added_ts__year + , subq_1.user__bio_added_ts__extract_year + , subq_1.user__bio_added_ts__extract_quarter + , subq_1.user__bio_added_ts__extract_month + , subq_1.user__bio_added_ts__extract_day + , subq_1.user__bio_added_ts__extract_dow + , subq_1.user__bio_added_ts__extract_doy + , subq_1.user__last_login_ts__minute + , subq_1.user__last_login_ts__hour + , subq_1.user__last_login_ts__day + , subq_1.user__last_login_ts__week + , subq_1.user__last_login_ts__month + , subq_1.user__last_login_ts__quarter + , subq_1.user__last_login_ts__year + , subq_1.user__last_login_ts__extract_year + , subq_1.user__last_login_ts__extract_quarter + , subq_1.user__last_login_ts__extract_month + , subq_1.user__last_login_ts__extract_day + , subq_1.user__last_login_ts__extract_dow + , subq_1.user__last_login_ts__extract_doy + , subq_1.user__archived_at__hour + , subq_1.user__archived_at__day + , subq_1.user__archived_at__week + , subq_1.user__archived_at__month + , subq_1.user__archived_at__quarter + , subq_1.user__archived_at__year + , subq_1.user__archived_at__extract_year + , subq_1.user__archived_at__extract_quarter + , subq_1.user__archived_at__extract_month + , subq_1.user__archived_at__extract_day + , subq_1.user__archived_at__extract_dow + , subq_1.user__archived_at__extract_doy + , subq_1.metric_time__hour + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.user + , subq_1.home_state + , subq_1.user__home_state + , subq_1.archived_users + FROM ( + -- Metric Time Dimension 'archived_at' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.last_profile_edit_ts__millisecond + , subq_0.last_profile_edit_ts__second + , subq_0.last_profile_edit_ts__minute + , subq_0.last_profile_edit_ts__hour + , subq_0.last_profile_edit_ts__day + , subq_0.last_profile_edit_ts__week + , subq_0.last_profile_edit_ts__month + , subq_0.last_profile_edit_ts__quarter + , subq_0.last_profile_edit_ts__year + , subq_0.last_profile_edit_ts__extract_year + , subq_0.last_profile_edit_ts__extract_quarter + , subq_0.last_profile_edit_ts__extract_month + , subq_0.last_profile_edit_ts__extract_day + , subq_0.last_profile_edit_ts__extract_dow + , subq_0.last_profile_edit_ts__extract_doy + , subq_0.bio_added_ts__second + , subq_0.bio_added_ts__minute + , subq_0.bio_added_ts__hour + , subq_0.bio_added_ts__day + , subq_0.bio_added_ts__week + , subq_0.bio_added_ts__month + , subq_0.bio_added_ts__quarter + , subq_0.bio_added_ts__year + , subq_0.bio_added_ts__extract_year + , subq_0.bio_added_ts__extract_quarter + , subq_0.bio_added_ts__extract_month + , subq_0.bio_added_ts__extract_day + , subq_0.bio_added_ts__extract_dow + , subq_0.bio_added_ts__extract_doy + , subq_0.last_login_ts__minute + , subq_0.last_login_ts__hour + , subq_0.last_login_ts__day + , subq_0.last_login_ts__week + , subq_0.last_login_ts__month + , subq_0.last_login_ts__quarter + , subq_0.last_login_ts__year + , subq_0.last_login_ts__extract_year + , subq_0.last_login_ts__extract_quarter + , subq_0.last_login_ts__extract_month + , subq_0.last_login_ts__extract_day + , subq_0.last_login_ts__extract_dow + , subq_0.last_login_ts__extract_doy + , subq_0.archived_at__hour + , subq_0.archived_at__day + , subq_0.archived_at__week + , subq_0.archived_at__month + , subq_0.archived_at__quarter + , subq_0.archived_at__year + , subq_0.archived_at__extract_year + , subq_0.archived_at__extract_quarter + , subq_0.archived_at__extract_month + , subq_0.archived_at__extract_day + , subq_0.archived_at__extract_dow + , subq_0.archived_at__extract_doy + , subq_0.user__ds__day + , subq_0.user__ds__week + , subq_0.user__ds__month + , subq_0.user__ds__quarter + , subq_0.user__ds__year + , subq_0.user__ds__extract_year + , subq_0.user__ds__extract_quarter + , subq_0.user__ds__extract_month + , subq_0.user__ds__extract_day + , subq_0.user__ds__extract_dow + , subq_0.user__ds__extract_doy + , subq_0.user__created_at__day + , subq_0.user__created_at__week + , subq_0.user__created_at__month + , subq_0.user__created_at__quarter + , subq_0.user__created_at__year + , subq_0.user__created_at__extract_year + , subq_0.user__created_at__extract_quarter + , subq_0.user__created_at__extract_month + , subq_0.user__created_at__extract_day + , subq_0.user__created_at__extract_dow + , subq_0.user__created_at__extract_doy + , subq_0.user__ds_partitioned__day + , subq_0.user__ds_partitioned__week + , subq_0.user__ds_partitioned__month + , subq_0.user__ds_partitioned__quarter + , subq_0.user__ds_partitioned__year + , subq_0.user__ds_partitioned__extract_year + , subq_0.user__ds_partitioned__extract_quarter + , subq_0.user__ds_partitioned__extract_month + , subq_0.user__ds_partitioned__extract_day + , subq_0.user__ds_partitioned__extract_dow + , subq_0.user__ds_partitioned__extract_doy + , subq_0.user__last_profile_edit_ts__millisecond + , subq_0.user__last_profile_edit_ts__second + , subq_0.user__last_profile_edit_ts__minute + , subq_0.user__last_profile_edit_ts__hour + , subq_0.user__last_profile_edit_ts__day + , subq_0.user__last_profile_edit_ts__week + , subq_0.user__last_profile_edit_ts__month + , subq_0.user__last_profile_edit_ts__quarter + , subq_0.user__last_profile_edit_ts__year + , subq_0.user__last_profile_edit_ts__extract_year + , subq_0.user__last_profile_edit_ts__extract_quarter + , subq_0.user__last_profile_edit_ts__extract_month + , subq_0.user__last_profile_edit_ts__extract_day + , subq_0.user__last_profile_edit_ts__extract_dow + , subq_0.user__last_profile_edit_ts__extract_doy + , subq_0.user__bio_added_ts__second + , subq_0.user__bio_added_ts__minute + , subq_0.user__bio_added_ts__hour + , subq_0.user__bio_added_ts__day + , subq_0.user__bio_added_ts__week + , subq_0.user__bio_added_ts__month + , subq_0.user__bio_added_ts__quarter + , subq_0.user__bio_added_ts__year + , subq_0.user__bio_added_ts__extract_year + , subq_0.user__bio_added_ts__extract_quarter + , subq_0.user__bio_added_ts__extract_month + , subq_0.user__bio_added_ts__extract_day + , subq_0.user__bio_added_ts__extract_dow + , subq_0.user__bio_added_ts__extract_doy + , subq_0.user__last_login_ts__minute + , subq_0.user__last_login_ts__hour + , subq_0.user__last_login_ts__day + , subq_0.user__last_login_ts__week + , subq_0.user__last_login_ts__month + , subq_0.user__last_login_ts__quarter + , subq_0.user__last_login_ts__year + , subq_0.user__last_login_ts__extract_year + , subq_0.user__last_login_ts__extract_quarter + , subq_0.user__last_login_ts__extract_month + , subq_0.user__last_login_ts__extract_day + , subq_0.user__last_login_ts__extract_dow + , subq_0.user__last_login_ts__extract_doy + , subq_0.user__archived_at__hour + , subq_0.user__archived_at__day + , subq_0.user__archived_at__week + , subq_0.user__archived_at__month + , subq_0.user__archived_at__quarter + , subq_0.user__archived_at__year + , subq_0.user__archived_at__extract_year + , subq_0.user__archived_at__extract_quarter + , subq_0.user__archived_at__extract_month + , subq_0.user__archived_at__extract_day + , subq_0.user__archived_at__extract_dow + , subq_0.user__archived_at__extract_doy + , subq_0.archived_at__hour AS metric_time__hour + , subq_0.archived_at__day AS metric_time__day + , subq_0.archived_at__week AS metric_time__week + , subq_0.archived_at__month AS metric_time__month + , subq_0.archived_at__quarter AS metric_time__quarter + , subq_0.archived_at__year AS metric_time__year + , subq_0.archived_at__extract_year AS metric_time__extract_year + , subq_0.archived_at__extract_quarter AS metric_time__extract_quarter + , subq_0.archived_at__extract_month AS metric_time__extract_month + , subq_0.archived_at__extract_day AS metric_time__extract_day + , subq_0.archived_at__extract_dow AS metric_time__extract_dow + , subq_0.archived_at__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.home_state + , subq_0.user__home_state + , subq_0.archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__hour = subq_4.metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + WHERE subq_9.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql new file mode 100644 index 0000000000..5a6b3ab427 --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql @@ -0,0 +1,47 @@ +test_name: test_subdaily_time_constraint_with_metric +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] +-- Compute Metrics via Expressions +SELECT + subq_19.metric_time__hour AS metric_time__hour + , subq_15.archived_users AS subdaily_join_to_time_spine_metric +FROM ( + -- Read From Time Spine 'mf_time_spine_hour' + -- Change Column Aliases + -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] + -- Pass Only Elements: ['metric_time__hour',] + SELECT + ts AS metric_time__hour + FROM ***************************.mf_time_spine_hour time_spine_src_28005 + WHERE ts BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +LEFT OUTER JOIN +( + -- Aggregate Measures + SELECT + metric_time__hour + , SUM(archived_users) AS archived_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + -- Metric Time Dimension 'archived_at' + -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] + -- Pass Only Elements: ['archived_users', 'metric_time__hour'] + SELECT + DATE_TRUNC('hour', archived_at) AS metric_time__hour + , 1 AS archived_users + FROM ***************************.dim_users users_ds_source_src_28000 + WHERE DATE_TRUNC('hour', archived_at) BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + metric_time__hour + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +ON + subq_19.metric_time__hour = subq_15.metric_time__hour +WHERE subq_19.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql new file mode 100644 index 0000000000..8818ef023d --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql @@ -0,0 +1,97 @@ +test_name: test_subdaily_time_constraint_without_metrics +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__second',] +SELECT + subq_2.metric_time__second +FROM ( + -- Constrain Time Range to [2020-01-01T00:00:02, 2020-01-01T00:00:08] + SELECT + subq_1.ts__second + , subq_1.ts__minute + , subq_1.ts__hour + , subq_1.ts__day + , subq_1.ts__week + , subq_1.ts__month + , subq_1.ts__quarter + , subq_1.ts__year + , subq_1.ts__extract_year + , subq_1.ts__extract_quarter + , subq_1.ts__extract_month + , subq_1.ts__extract_day + , subq_1.ts__extract_dow + , subq_1.ts__extract_doy + , subq_1.metric_time__second + , subq_1.metric_time__minute + , subq_1.metric_time__hour + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + FROM ( + -- Metric Time Dimension 'ts' + SELECT + subq_0.ts__second + , subq_0.ts__minute + , subq_0.ts__hour + , subq_0.ts__day + , subq_0.ts__week + , subq_0.ts__month + , subq_0.ts__quarter + , subq_0.ts__year + , subq_0.ts__extract_year + , subq_0.ts__extract_quarter + , subq_0.ts__extract_month + , subq_0.ts__extract_day + , subq_0.ts__extract_dow + , subq_0.ts__extract_doy + , subq_0.ts__second AS metric_time__second + , subq_0.ts__minute AS metric_time__minute + , subq_0.ts__hour AS metric_time__hour + , subq_0.ts__day AS metric_time__day + , subq_0.ts__week AS metric_time__week + , subq_0.ts__month AS metric_time__month + , subq_0.ts__quarter AS metric_time__quarter + , subq_0.ts__year AS metric_time__year + , subq_0.ts__extract_year AS metric_time__extract_year + , subq_0.ts__extract_quarter AS metric_time__extract_quarter + , subq_0.ts__extract_month AS metric_time__extract_month + , subq_0.ts__extract_day AS metric_time__extract_day + , subq_0.ts__extract_dow AS metric_time__extract_dow + , subq_0.ts__extract_doy AS metric_time__extract_doy + FROM ( + -- Read From Time Spine 'mf_time_spine_second' + SELECT + time_spine_src_28003.ts AS ts__second + , DATE_TRUNC('minute', time_spine_src_28003.ts) AS ts__minute + , DATE_TRUNC('hour', time_spine_src_28003.ts) AS ts__hour + , DATE_TRUNC('day', time_spine_src_28003.ts) AS ts__day + , DATE_TRUNC('week', time_spine_src_28003.ts) AS ts__week + , DATE_TRUNC('month', time_spine_src_28003.ts) AS ts__month + , DATE_TRUNC('quarter', time_spine_src_28003.ts) AS ts__quarter + , DATE_TRUNC('year', time_spine_src_28003.ts) AS ts__year + , EXTRACT(toYear FROM time_spine_src_28003.ts) AS ts__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28003.ts) AS ts__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28003.ts) AS ts__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28003.ts) AS ts__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28003.ts) AS ts__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28003.ts) AS ts__extract_doy + FROM ***************************.mf_time_spine_second time_spine_src_28003 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__second BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + subq_2.metric_time__second +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql new file mode 100644 index 0000000000..f886c343bb --- /dev/null +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql @@ -0,0 +1,15 @@ +test_name: test_subdaily_time_constraint_without_metrics +test_filename: test_granularity_date_part_rendering.py +sql_engine: Clickhouse +--- +-- Read From Time Spine 'mf_time_spine_second' +-- Metric Time Dimension 'ts' +-- Constrain Time Range to [2020-01-01T00:00:02, 2020-01-01T00:00:08] +-- Pass Only Elements: ['metric_time__second',] +SELECT + ts AS metric_time__second +FROM ***************************.mf_time_spine_second time_spine_src_28003 +WHERE ts BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' +GROUP BY + ts +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt new file mode 100644 index 0000000000..d990d9cac2 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt @@ -0,0 +1,11 @@ +test_name: test_metric_with_metric_in_where_filter +test_filename: test_metric_filter_output.py +--- +listing active_listings bookings +------------------- ----------------- ---------- + 0 3 +l2718281 1 15 +l3141592 1 15 +l5948301 1 7 +l8912456-incomplete 1 3 +l9658588-incomplete 1 3 diff --git a/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_query_with_simple_metric_in_where_filter__query_output.txt new file mode 100644 index 0000000000..1b81e822b3 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_query_with_simple_metric_in_where_filter__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_query_with_simple_metric_in_where_filter +test_filename: test_metric_filter_output.py +--- +listing listings bookings +--------- ---------- ---------- +l2718281 1 15 +l3141592 1 15 +l5948301 1 7 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql new file mode 100644 index 0000000000..4d434526dc --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql @@ -0,0 +1,270 @@ +test_name: test_distinct_values_query_with_metric_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a distinct values query with a metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['listing',] +SELECT + subq_8.listing +FROM ( + -- Constrain Output with WHERE + SELECT + subq_7.listing + , subq_7.lux_listing + , subq_7.listing__lux_listing + , subq_7.listing__bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_6.listing__bookings AS listing__bookings + , subq_0.listing AS listing + , subq_0.lux_listing AS lux_listing + , subq_0.listing__lux_listing AS listing__lux_listing + FROM ( + -- Read Elements From Semantic Model 'lux_listing_mapping' + SELECT + lux_listing_mapping_src_28000.listing_id AS listing + , lux_listing_mapping_src_28000.lux_listing_id AS lux_listing + , lux_listing_mapping_src_28000.lux_listing_id AS listing__lux_listing + FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + subq_5.listing + , subq_5.listing__bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.listing + , subq_4.bookings AS listing__bookings + FROM ( + -- Aggregate Measures + SELECT + subq_3.listing + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_2.listing + , subq_2.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.ds__day AS metric_time__day + , subq_1.ds__week AS metric_time__week + , subq_1.ds__month AS metric_time__month + , subq_1.ds__quarter AS metric_time__quarter + , subq_1.ds__year AS metric_time__year + , subq_1.ds__extract_year AS metric_time__extract_year + , subq_1.ds__extract_quarter AS metric_time__extract_quarter + , subq_1.ds__extract_month AS metric_time__extract_month + , subq_1.ds__extract_day AS metric_time__extract_day + , subq_1.ds__extract_dow AS metric_time__extract_dow + , subq_1.ds__extract_doy AS metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_0.listing = subq_6.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE listing__bookings > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +GROUP BY + subq_8.listing +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql new file mode 100644 index 0000000000..b54dff2b12 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql @@ -0,0 +1,46 @@ +test_name: test_distinct_values_query_with_metric_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a distinct values query with a metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listing',] +SELECT + listing +FROM ( + -- Join Standard Outputs + SELECT + subq_15.listing__bookings AS listing__bookings + , lux_listing_mapping_src_28000.listing_id AS listing + FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_28000 + FULL OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + listing + , SUM(bookings) AS listing__bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + lux_listing_mapping_src_28000.listing_id = subq_15.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +WHERE listing__bookings > 2 +GROUP BY + listing +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql new file mode 100644 index 0000000000..712508ce66 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql @@ -0,0 +1,658 @@ +test_name: test_filter_by_metric_in_same_semantic_model_as_queried_metric +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a simple metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.bookers +FROM ( + -- Aggregate Measures + SELECT + COUNT(DISTINCT subq_10.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers',] + SELECT + subq_9.bookers + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_partitioned__day + , subq_8.ds_partitioned__week + , subq_8.ds_partitioned__month + , subq_8.ds_partitioned__quarter + , subq_8.ds_partitioned__year + , subq_8.ds_partitioned__extract_year + , subq_8.ds_partitioned__extract_quarter + , subq_8.ds_partitioned__extract_month + , subq_8.ds_partitioned__extract_day + , subq_8.ds_partitioned__extract_dow + , subq_8.ds_partitioned__extract_doy + , subq_8.paid_at__day + , subq_8.paid_at__week + , subq_8.paid_at__month + , subq_8.paid_at__quarter + , subq_8.paid_at__year + , subq_8.paid_at__extract_year + , subq_8.paid_at__extract_quarter + , subq_8.paid_at__extract_month + , subq_8.paid_at__extract_day + , subq_8.paid_at__extract_dow + , subq_8.paid_at__extract_doy + , subq_8.booking__ds__day + , subq_8.booking__ds__week + , subq_8.booking__ds__month + , subq_8.booking__ds__quarter + , subq_8.booking__ds__year + , subq_8.booking__ds__extract_year + , subq_8.booking__ds__extract_quarter + , subq_8.booking__ds__extract_month + , subq_8.booking__ds__extract_day + , subq_8.booking__ds__extract_dow + , subq_8.booking__ds__extract_doy + , subq_8.booking__ds_partitioned__day + , subq_8.booking__ds_partitioned__week + , subq_8.booking__ds_partitioned__month + , subq_8.booking__ds_partitioned__quarter + , subq_8.booking__ds_partitioned__year + , subq_8.booking__ds_partitioned__extract_year + , subq_8.booking__ds_partitioned__extract_quarter + , subq_8.booking__ds_partitioned__extract_month + , subq_8.booking__ds_partitioned__extract_day + , subq_8.booking__ds_partitioned__extract_dow + , subq_8.booking__ds_partitioned__extract_doy + , subq_8.booking__paid_at__day + , subq_8.booking__paid_at__week + , subq_8.booking__paid_at__month + , subq_8.booking__paid_at__quarter + , subq_8.booking__paid_at__year + , subq_8.booking__paid_at__extract_year + , subq_8.booking__paid_at__extract_quarter + , subq_8.booking__paid_at__extract_month + , subq_8.booking__paid_at__extract_day + , subq_8.booking__paid_at__extract_dow + , subq_8.booking__paid_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.guest + , subq_8.host + , subq_8.booking__listing + , subq_8.booking__guest + , subq_8.booking__host + , subq_8.is_instant + , subq_8.booking__is_instant + , subq_8.guest__booking_value + , subq_8.bookings + , subq_8.instant_bookings + , subq_8.booking_value + , subq_8.max_booking_value + , subq_8.min_booking_value + , subq_8.bookers + , subq_8.average_booking_value + , subq_8.referred_bookings + , subq_8.median_booking_value + , subq_8.booking_value_p99 + , subq_8.discrete_booking_value_p99 + , subq_8.approximate_continuous_booking_value_p99 + , subq_8.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_7.guest__booking_value AS guest__booking_value + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['guest', 'guest__booking_value'] + SELECT + subq_6.guest + , subq_6.guest__booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.guest + , subq_5.booking_value AS guest__booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_4.guest + , SUM(subq_4.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'guest'] + SELECT + subq_3.guest + , subq_3.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.guest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.guest = subq_7.guest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE guest__booking_value > 1.00 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql new file mode 100644 index 0000000000..c9bfe6c613 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql @@ -0,0 +1,58 @@ +test_name: test_filter_by_metric_in_same_semantic_model_as_queried_metric +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a simple metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookers',] +-- Aggregate Measures +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + guest_id AS guest + , booking_value + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COUNT(DISTINCT bookers) AS bookers +FROM ( + -- Join Standard Outputs + SELECT + subq_18.guest__booking_value AS guest__booking_value + , subq_13.bookers AS bookers + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + guest + , booking_value + , bookers + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['booking_value', 'guest'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['guest', 'guest__booking_value'] + SELECT + guest + , SUM(booking_value) AS guest__booking_value + FROM sma_28009_cte sma_28009_cte + GROUP BY + guest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + ON + subq_13.guest = subq_18.guest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +WHERE guest__booking_value > 1.00 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql new file mode 100644 index 0000000000..6e2d0f8b19 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql @@ -0,0 +1,736 @@ +test_name: test_filter_with_conversion_metric +test_filename: test_metric_filter_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_22.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_21.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_20.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_19.ds__day + , subq_19.ds__week + , subq_19.ds__month + , subq_19.ds__quarter + , subq_19.ds__year + , subq_19.ds__extract_year + , subq_19.ds__extract_quarter + , subq_19.ds__extract_month + , subq_19.ds__extract_day + , subq_19.ds__extract_dow + , subq_19.ds__extract_doy + , subq_19.created_at__day + , subq_19.created_at__week + , subq_19.created_at__month + , subq_19.created_at__quarter + , subq_19.created_at__year + , subq_19.created_at__extract_year + , subq_19.created_at__extract_quarter + , subq_19.created_at__extract_month + , subq_19.created_at__extract_day + , subq_19.created_at__extract_dow + , subq_19.created_at__extract_doy + , subq_19.listing__ds__day + , subq_19.listing__ds__week + , subq_19.listing__ds__month + , subq_19.listing__ds__quarter + , subq_19.listing__ds__year + , subq_19.listing__ds__extract_year + , subq_19.listing__ds__extract_quarter + , subq_19.listing__ds__extract_month + , subq_19.listing__ds__extract_day + , subq_19.listing__ds__extract_dow + , subq_19.listing__ds__extract_doy + , subq_19.listing__created_at__day + , subq_19.listing__created_at__week + , subq_19.listing__created_at__month + , subq_19.listing__created_at__quarter + , subq_19.listing__created_at__year + , subq_19.listing__created_at__extract_year + , subq_19.listing__created_at__extract_quarter + , subq_19.listing__created_at__extract_month + , subq_19.listing__created_at__extract_day + , subq_19.listing__created_at__extract_dow + , subq_19.listing__created_at__extract_doy + , subq_19.metric_time__day + , subq_19.metric_time__week + , subq_19.metric_time__month + , subq_19.metric_time__quarter + , subq_19.metric_time__year + , subq_19.metric_time__extract_year + , subq_19.metric_time__extract_quarter + , subq_19.metric_time__extract_month + , subq_19.metric_time__extract_day + , subq_19.metric_time__extract_dow + , subq_19.metric_time__extract_doy + , subq_19.listing + , subq_19.user + , subq_19.listing__user + , subq_19.country_latest + , subq_19.is_lux_latest + , subq_19.capacity_latest + , subq_19.listing__country_latest + , subq_19.listing__is_lux_latest + , subq_19.listing__capacity_latest + , subq_19.user__visit_buy_conversion_rate + , subq_19.listings + , subq_19.largest_listing + , subq_19.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_18.user__visit_buy_conversion_rate AS user__visit_buy_conversion_rate + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['user', 'user__visit_buy_conversion_rate'] + SELECT + subq_17.user + , subq_17.user__visit_buy_conversion_rate + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_16.user + , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS user__visit_buy_conversion_rate + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.user, subq_15.user) AS user + , MAX(subq_5.visits) AS visits + , MAX(subq_15.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_4.user + , SUM(subq_4.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'user'] + SELECT + subq_3.user + , subq_3.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.visit__ds__day + , subq_2.visit__ds__week + , subq_2.visit__ds__month + , subq_2.visit__ds__quarter + , subq_2.visit__ds__year + , subq_2.visit__ds__extract_year + , subq_2.visit__ds__extract_quarter + , subq_2.visit__ds__extract_month + , subq_2.visit__ds__extract_day + , subq_2.visit__ds__extract_dow + , subq_2.visit__ds__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.user + , subq_2.session + , subq_2.visit__user + , subq_2.visit__session + , subq_2.referrer_id + , subq_2.visit__referrer_id + , subq_2.visits + , subq_2.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_14.user + , SUM(subq_14.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'user'] + SELECT + subq_13.user + , subq_13.buys + FROM ( + -- Find conversions for user within the range of INF + SELECT + subq_12.metric_time__day + , subq_12.user + , subq_12.buys + , subq_12.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_8.visits) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_8.metric_time__day) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_8.user) OVER ( + PARTITION BY + subq_11.user + , subq_11.metric_time__day + , subq_11.mf_internal_uuid + ORDER BY subq_8.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_11.mf_internal_uuid AS mf_internal_uuid + , subq_11.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'metric_time__day', 'user'] + SELECT + subq_7.metric_time__day + , subq_7.user + , subq_7.visits + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.visit__ds__day + , subq_6.visit__ds__week + , subq_6.visit__ds__month + , subq_6.visit__ds__quarter + , subq_6.visit__ds__year + , subq_6.visit__ds__extract_year + , subq_6.visit__ds__extract_quarter + , subq_6.visit__ds__extract_month + , subq_6.visit__ds__extract_day + , subq_6.visit__ds__extract_dow + , subq_6.visit__ds__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.user + , subq_6.session + , subq_6.visit__user + , subq_6.visit__session + , subq_6.referrer_id + , subq_6.visit__referrer_id + , subq_6.visits + , subq_6.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_month__month + , subq_10.ds_month__quarter + , subq_10.ds_month__year + , subq_10.ds_month__extract_year + , subq_10.ds_month__extract_quarter + , subq_10.ds_month__extract_month + , subq_10.buy__ds__day + , subq_10.buy__ds__week + , subq_10.buy__ds__month + , subq_10.buy__ds__quarter + , subq_10.buy__ds__year + , subq_10.buy__ds__extract_year + , subq_10.buy__ds__extract_quarter + , subq_10.buy__ds__extract_month + , subq_10.buy__ds__extract_day + , subq_10.buy__ds__extract_dow + , subq_10.buy__ds__extract_doy + , subq_10.buy__ds_month__month + , subq_10.buy__ds_month__quarter + , subq_10.buy__ds_month__year + , subq_10.buy__ds_month__extract_year + , subq_10.buy__ds_month__extract_quarter + , subq_10.buy__ds_month__extract_month + , subq_10.metric_time__day + , subq_10.metric_time__week + , subq_10.metric_time__month + , subq_10.metric_time__quarter + , subq_10.metric_time__year + , subq_10.metric_time__extract_year + , subq_10.metric_time__extract_quarter + , subq_10.metric_time__extract_month + , subq_10.metric_time__extract_day + , subq_10.metric_time__extract_dow + , subq_10.metric_time__extract_doy + , subq_10.user + , subq_10.session_id + , subq_10.buy__user + , subq_10.buy__session_id + , subq_10.buys + , subq_10.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_9.ds__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds_month__month + , subq_9.ds_month__quarter + , subq_9.ds_month__year + , subq_9.ds_month__extract_year + , subq_9.ds_month__extract_quarter + , subq_9.ds_month__extract_month + , subq_9.buy__ds__day + , subq_9.buy__ds__week + , subq_9.buy__ds__month + , subq_9.buy__ds__quarter + , subq_9.buy__ds__year + , subq_9.buy__ds__extract_year + , subq_9.buy__ds__extract_quarter + , subq_9.buy__ds__extract_month + , subq_9.buy__ds__extract_day + , subq_9.buy__ds__extract_dow + , subq_9.buy__ds__extract_doy + , subq_9.buy__ds_month__month + , subq_9.buy__ds_month__quarter + , subq_9.buy__ds_month__year + , subq_9.buy__ds_month__extract_year + , subq_9.buy__ds_month__extract_quarter + , subq_9.buy__ds_month__extract_month + , subq_9.ds__day AS metric_time__day + , subq_9.ds__week AS metric_time__week + , subq_9.ds__month AS metric_time__month + , subq_9.ds__quarter AS metric_time__quarter + , subq_9.ds__year AS metric_time__year + , subq_9.ds__extract_year AS metric_time__extract_year + , subq_9.ds__extract_quarter AS metric_time__extract_quarter + , subq_9.ds__extract_month AS metric_time__extract_month + , subq_9.ds__extract_day AS metric_time__extract_day + , subq_9.ds__extract_dow AS metric_time__extract_dow + , subq_9.ds__extract_doy AS metric_time__extract_doy + , subq_9.user + , subq_9.session_id + , subq_9.buy__user + , subq_9.buy__session_id + , subq_9.buys + , subq_9.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + subq_14.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_5.user = subq_15.user + GROUP BY + COALESCE(subq_5.user, subq_15.user) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + ON + subq_1.user = subq_18.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + WHERE user__visit_buy_conversion_rate > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql new file mode 100644 index 0000000000..5a4b8ca9dc --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql @@ -0,0 +1,123 @@ +test_name: test_filter_with_conversion_metric +test_filename: test_metric_filter_rendering.py +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + CAST(subq_38.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_38.visits, 0) AS DOUBLE PRECISION) AS user__visit_buy_conversion_rate + , subq_24.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + user_id AS user + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + LEFT OUTER JOIN + ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_28.user, subq_37.user) AS user + , MAX(subq_28.visits) AS visits + , MAX(subq_37.buys) AS buys + FROM ( + -- Read From CTE For node_id=sma_28019 + -- Pass Only Elements: ['visits', 'user'] + -- Aggregate Measures + SELECT + sma_28019_cte.user + , SUM(visits) AS visits + FROM sma_28019_cte sma_28019_cte + GROUP BY + sma_28019_cte.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of INF + -- Pass Only Elements: ['buys', 'user'] + -- Aggregate Measures + SELECT + subq_34.user + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(sma_28019_cte.visits) OVER ( + PARTITION BY + subq_33.user + , subq_33.metric_time__day + , subq_33.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(sma_28019_cte.metric_time__day) OVER ( + PARTITION BY + subq_33.user + , subq_33.metric_time__day + , subq_33.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(sma_28019_cte.user) OVER ( + PARTITION BY + subq_33.user + , subq_33.metric_time__day + , subq_33.mf_internal_uuid + ORDER BY sma_28019_cte.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_33.mf_internal_uuid AS mf_internal_uuid + , subq_33.buys AS buys + FROM sma_28019_cte sma_28019_cte + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_33 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + GROUP BY + subq_34.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_37 + ON + subq_28.user = subq_37.user + GROUP BY + COALESCE(subq_28.user, subq_37.user) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_38 + ON + subq_24.user = subq_38.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_41 +WHERE user__visit_buy_conversion_rate > 2 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql new file mode 100644 index 0000000000..937ce0618c --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql @@ -0,0 +1,781 @@ +test_name: test_group_by_has_local_entity_prefix +test_filename: test_metric_filter_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_15.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_14.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_13.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.created_at__day + , subq_12.created_at__week + , subq_12.created_at__month + , subq_12.created_at__quarter + , subq_12.created_at__year + , subq_12.created_at__extract_year + , subq_12.created_at__extract_quarter + , subq_12.created_at__extract_month + , subq_12.created_at__extract_day + , subq_12.created_at__extract_dow + , subq_12.created_at__extract_doy + , subq_12.listing__ds__day + , subq_12.listing__ds__week + , subq_12.listing__ds__month + , subq_12.listing__ds__quarter + , subq_12.listing__ds__year + , subq_12.listing__ds__extract_year + , subq_12.listing__ds__extract_quarter + , subq_12.listing__ds__extract_month + , subq_12.listing__ds__extract_day + , subq_12.listing__ds__extract_dow + , subq_12.listing__ds__extract_doy + , subq_12.listing__created_at__day + , subq_12.listing__created_at__week + , subq_12.listing__created_at__month + , subq_12.listing__created_at__quarter + , subq_12.listing__created_at__year + , subq_12.listing__created_at__extract_year + , subq_12.listing__created_at__extract_quarter + , subq_12.listing__created_at__extract_month + , subq_12.listing__created_at__extract_day + , subq_12.listing__created_at__extract_dow + , subq_12.listing__created_at__extract_doy + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.listing + , subq_12.user + , subq_12.listing__user + , subq_12.user__listing__user + , subq_12.country_latest + , subq_12.is_lux_latest + , subq_12.capacity_latest + , subq_12.listing__country_latest + , subq_12.listing__is_lux_latest + , subq_12.listing__capacity_latest + , subq_12.user__listing__user__average_booking_value + , subq_12.listings + , subq_12.largest_listing + , subq_12.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_11.listing__user AS user__listing__user + , subq_11.listing__user__average_booking_value AS user__listing__user__average_booking_value + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing__user', 'listing__user__average_booking_value'] + SELECT + subq_10.listing__user + , subq_10.listing__user__average_booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_9.listing__user + , subq_9.average_booking_value AS listing__user__average_booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_8.listing__user + , AVG(subq_8.average_booking_value) AS average_booking_value + FROM ( + -- Pass Only Elements: ['average_booking_value', 'listing__user'] + SELECT + subq_7.listing__user + , subq_7.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_6.user AS listing__user + , subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.ds_partitioned__day AS ds_partitioned__day + , subq_3.ds_partitioned__week AS ds_partitioned__week + , subq_3.ds_partitioned__month AS ds_partitioned__month + , subq_3.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_3.ds_partitioned__year AS ds_partitioned__year + , subq_3.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_3.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_3.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_3.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_3.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_3.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_3.paid_at__day AS paid_at__day + , subq_3.paid_at__week AS paid_at__week + , subq_3.paid_at__month AS paid_at__month + , subq_3.paid_at__quarter AS paid_at__quarter + , subq_3.paid_at__year AS paid_at__year + , subq_3.paid_at__extract_year AS paid_at__extract_year + , subq_3.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_3.paid_at__extract_month AS paid_at__extract_month + , subq_3.paid_at__extract_day AS paid_at__extract_day + , subq_3.paid_at__extract_dow AS paid_at__extract_dow + , subq_3.paid_at__extract_doy AS paid_at__extract_doy + , subq_3.booking__ds__day AS booking__ds__day + , subq_3.booking__ds__week AS booking__ds__week + , subq_3.booking__ds__month AS booking__ds__month + , subq_3.booking__ds__quarter AS booking__ds__quarter + , subq_3.booking__ds__year AS booking__ds__year + , subq_3.booking__ds__extract_year AS booking__ds__extract_year + , subq_3.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_3.booking__ds__extract_month AS booking__ds__extract_month + , subq_3.booking__ds__extract_day AS booking__ds__extract_day + , subq_3.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_3.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_3.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_3.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_3.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_3.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_3.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_3.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_3.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_3.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_3.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_3.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_3.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_3.booking__paid_at__day AS booking__paid_at__day + , subq_3.booking__paid_at__week AS booking__paid_at__week + , subq_3.booking__paid_at__month AS booking__paid_at__month + , subq_3.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_3.booking__paid_at__year AS booking__paid_at__year + , subq_3.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_3.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_3.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_3.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_3.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_3.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_3.metric_time__week AS metric_time__week + , subq_3.metric_time__month AS metric_time__month + , subq_3.metric_time__quarter AS metric_time__quarter + , subq_3.metric_time__year AS metric_time__year + , subq_3.metric_time__extract_year AS metric_time__extract_year + , subq_3.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_3.metric_time__extract_month AS metric_time__extract_month + , subq_3.metric_time__extract_day AS metric_time__extract_day + , subq_3.metric_time__extract_dow AS metric_time__extract_dow + , subq_3.metric_time__extract_doy AS metric_time__extract_doy + , subq_3.listing AS listing + , subq_3.guest AS guest + , subq_3.host AS host + , subq_3.booking__listing AS booking__listing + , subq_3.booking__guest AS booking__guest + , subq_3.booking__host AS booking__host + , subq_3.is_instant AS is_instant + , subq_3.booking__is_instant AS booking__is_instant + , subq_3.bookings AS bookings + , subq_3.instant_bookings AS instant_bookings + , subq_3.booking_value AS booking_value + , subq_3.max_booking_value AS max_booking_value + , subq_3.min_booking_value AS min_booking_value + , subq_3.bookers AS bookers + , subq_3.average_booking_value AS average_booking_value + , subq_3.referred_bookings AS referred_bookings + , subq_3.median_booking_value AS median_booking_value + , subq_3.booking_value_p99 AS booking_value_p99 + , subq_3.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_3.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_3.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'user'] + SELECT + subq_5.listing + , subq_5.user + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.created_at__day + , subq_4.created_at__week + , subq_4.created_at__month + , subq_4.created_at__quarter + , subq_4.created_at__year + , subq_4.created_at__extract_year + , subq_4.created_at__extract_quarter + , subq_4.created_at__extract_month + , subq_4.created_at__extract_day + , subq_4.created_at__extract_dow + , subq_4.created_at__extract_doy + , subq_4.listing__ds__day + , subq_4.listing__ds__week + , subq_4.listing__ds__month + , subq_4.listing__ds__quarter + , subq_4.listing__ds__year + , subq_4.listing__ds__extract_year + , subq_4.listing__ds__extract_quarter + , subq_4.listing__ds__extract_month + , subq_4.listing__ds__extract_day + , subq_4.listing__ds__extract_dow + , subq_4.listing__ds__extract_doy + , subq_4.listing__created_at__day + , subq_4.listing__created_at__week + , subq_4.listing__created_at__month + , subq_4.listing__created_at__quarter + , subq_4.listing__created_at__year + , subq_4.listing__created_at__extract_year + , subq_4.listing__created_at__extract_quarter + , subq_4.listing__created_at__extract_month + , subq_4.listing__created_at__extract_day + , subq_4.listing__created_at__extract_dow + , subq_4.listing__created_at__extract_doy + , subq_4.ds__day AS metric_time__day + , subq_4.ds__week AS metric_time__week + , subq_4.ds__month AS metric_time__month + , subq_4.ds__quarter AS metric_time__quarter + , subq_4.ds__year AS metric_time__year + , subq_4.ds__extract_year AS metric_time__extract_year + , subq_4.ds__extract_quarter AS metric_time__extract_quarter + , subq_4.ds__extract_month AS metric_time__extract_month + , subq_4.ds__extract_day AS metric_time__extract_day + , subq_4.ds__extract_dow AS metric_time__extract_dow + , subq_4.ds__extract_doy AS metric_time__extract_doy + , subq_4.listing + , subq_4.user + , subq_4.listing__user + , subq_4.country_latest + , subq_4.is_lux_latest + , subq_4.capacity_latest + , subq_4.listing__country_latest + , subq_4.listing__is_lux_latest + , subq_4.listing__capacity_latest + , subq_4.listings + , subq_4.largest_listing + , subq_4.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + subq_3.listing = subq_6.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.listing__user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_1.user = subq_11.listing__user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + WHERE user__listing__user__average_booking_value > 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql new file mode 100644 index 0000000000..10ccd94734 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql @@ -0,0 +1,52 @@ +test_name: test_group_by_has_local_entity_prefix +test_filename: test_metric_filter_rendering.py +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +WITH sma_28014_cte AS ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , user_id AS user + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + subq_26.listing__user__average_booking_value AS user__listing__user__average_booking_value + , sma_28014_cte.listings AS listings + FROM sma_28014_cte sma_28014_cte + LEFT OUTER JOIN + ( + -- Join Standard Outputs + -- Pass Only Elements: ['average_booking_value', 'listing__user'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing__user', 'listing__user__average_booking_value'] + SELECT + sma_28014_cte.user AS listing__user + , AVG(bookings_source_src_28000.booking_value) AS listing__user__average_booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + bookings_source_src_28000.listing_id = sma_28014_cte.listing + GROUP BY + sma_28014_cte.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + ON + sma_28014_cte.user = subq_26.listing__user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_27 +WHERE user__listing__user__average_booking_value > 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql new file mode 100644 index 0000000000..8a148b0aa2 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql @@ -0,0 +1,833 @@ +test_name: test_inner_query_multi_hop +test_filename: test_metric_filter_rendering.py +docstring: + Tests rendering for a metric filter using a two-hop join in the inner query. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_19.third_hop_count +FROM ( + -- Aggregate Measures + SELECT + COUNT(DISTINCT subq_18.third_hop_count) AS third_hop_count + FROM ( + -- Pass Only Elements: ['third_hop_count',] + SELECT + subq_17.third_hop_count + FROM ( + -- Constrain Output with WHERE + SELECT + subq_16.third_hop_ds__day + , subq_16.third_hop_ds__week + , subq_16.third_hop_ds__month + , subq_16.third_hop_ds__quarter + , subq_16.third_hop_ds__year + , subq_16.third_hop_ds__extract_year + , subq_16.third_hop_ds__extract_quarter + , subq_16.third_hop_ds__extract_month + , subq_16.third_hop_ds__extract_day + , subq_16.third_hop_ds__extract_dow + , subq_16.third_hop_ds__extract_doy + , subq_16.customer_third_hop_id__third_hop_ds__day + , subq_16.customer_third_hop_id__third_hop_ds__week + , subq_16.customer_third_hop_id__third_hop_ds__month + , subq_16.customer_third_hop_id__third_hop_ds__quarter + , subq_16.customer_third_hop_id__third_hop_ds__year + , subq_16.customer_third_hop_id__third_hop_ds__extract_year + , subq_16.customer_third_hop_id__third_hop_ds__extract_quarter + , subq_16.customer_third_hop_id__third_hop_ds__extract_month + , subq_16.customer_third_hop_id__third_hop_ds__extract_day + , subq_16.customer_third_hop_id__third_hop_ds__extract_dow + , subq_16.customer_third_hop_id__third_hop_ds__extract_doy + , subq_16.metric_time__day + , subq_16.metric_time__week + , subq_16.metric_time__month + , subq_16.metric_time__quarter + , subq_16.metric_time__year + , subq_16.metric_time__extract_year + , subq_16.metric_time__extract_quarter + , subq_16.metric_time__extract_month + , subq_16.metric_time__extract_day + , subq_16.metric_time__extract_dow + , subq_16.metric_time__extract_doy + , subq_16.customer_third_hop_id + , subq_16.customer_third_hop_id__account_id__customer_id__customer_third_hop_id + , subq_16.value + , subq_16.customer_third_hop_id__value + , subq_16.customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count + , subq_16.third_hop_count + FROM ( + -- Join Standard Outputs + SELECT + subq_15.account_id__customer_id__customer_third_hop_id AS customer_third_hop_id__account_id__customer_id__customer_third_hop_id + , subq_15.account_id__customer_id__customer_third_hop_id__txn_count AS customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count + , subq_1.third_hop_ds__day AS third_hop_ds__day + , subq_1.third_hop_ds__week AS third_hop_ds__week + , subq_1.third_hop_ds__month AS third_hop_ds__month + , subq_1.third_hop_ds__quarter AS third_hop_ds__quarter + , subq_1.third_hop_ds__year AS third_hop_ds__year + , subq_1.third_hop_ds__extract_year AS third_hop_ds__extract_year + , subq_1.third_hop_ds__extract_quarter AS third_hop_ds__extract_quarter + , subq_1.third_hop_ds__extract_month AS third_hop_ds__extract_month + , subq_1.third_hop_ds__extract_day AS third_hop_ds__extract_day + , subq_1.third_hop_ds__extract_dow AS third_hop_ds__extract_dow + , subq_1.third_hop_ds__extract_doy AS third_hop_ds__extract_doy + , subq_1.customer_third_hop_id__third_hop_ds__day AS customer_third_hop_id__third_hop_ds__day + , subq_1.customer_third_hop_id__third_hop_ds__week AS customer_third_hop_id__third_hop_ds__week + , subq_1.customer_third_hop_id__third_hop_ds__month AS customer_third_hop_id__third_hop_ds__month + , subq_1.customer_third_hop_id__third_hop_ds__quarter AS customer_third_hop_id__third_hop_ds__quarter + , subq_1.customer_third_hop_id__third_hop_ds__year AS customer_third_hop_id__third_hop_ds__year + , subq_1.customer_third_hop_id__third_hop_ds__extract_year AS customer_third_hop_id__third_hop_ds__extract_year + , subq_1.customer_third_hop_id__third_hop_ds__extract_quarter AS customer_third_hop_id__third_hop_ds__extract_quarter + , subq_1.customer_third_hop_id__third_hop_ds__extract_month AS customer_third_hop_id__third_hop_ds__extract_month + , subq_1.customer_third_hop_id__third_hop_ds__extract_day AS customer_third_hop_id__third_hop_ds__extract_day + , subq_1.customer_third_hop_id__third_hop_ds__extract_dow AS customer_third_hop_id__third_hop_ds__extract_dow + , subq_1.customer_third_hop_id__third_hop_ds__extract_doy AS customer_third_hop_id__third_hop_ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.customer_third_hop_id AS customer_third_hop_id + , subq_1.value AS value + , subq_1.customer_third_hop_id__value AS customer_third_hop_id__value + , subq_1.third_hop_count AS third_hop_count + FROM ( + -- Metric Time Dimension 'third_hop_ds' + SELECT + subq_0.third_hop_ds__day + , subq_0.third_hop_ds__week + , subq_0.third_hop_ds__month + , subq_0.third_hop_ds__quarter + , subq_0.third_hop_ds__year + , subq_0.third_hop_ds__extract_year + , subq_0.third_hop_ds__extract_quarter + , subq_0.third_hop_ds__extract_month + , subq_0.third_hop_ds__extract_day + , subq_0.third_hop_ds__extract_dow + , subq_0.third_hop_ds__extract_doy + , subq_0.customer_third_hop_id__third_hop_ds__day + , subq_0.customer_third_hop_id__third_hop_ds__week + , subq_0.customer_third_hop_id__third_hop_ds__month + , subq_0.customer_third_hop_id__third_hop_ds__quarter + , subq_0.customer_third_hop_id__third_hop_ds__year + , subq_0.customer_third_hop_id__third_hop_ds__extract_year + , subq_0.customer_third_hop_id__third_hop_ds__extract_quarter + , subq_0.customer_third_hop_id__third_hop_ds__extract_month + , subq_0.customer_third_hop_id__third_hop_ds__extract_day + , subq_0.customer_third_hop_id__third_hop_ds__extract_dow + , subq_0.customer_third_hop_id__third_hop_ds__extract_doy + , subq_0.third_hop_ds__day AS metric_time__day + , subq_0.third_hop_ds__week AS metric_time__week + , subq_0.third_hop_ds__month AS metric_time__month + , subq_0.third_hop_ds__quarter AS metric_time__quarter + , subq_0.third_hop_ds__year AS metric_time__year + , subq_0.third_hop_ds__extract_year AS metric_time__extract_year + , subq_0.third_hop_ds__extract_quarter AS metric_time__extract_quarter + , subq_0.third_hop_ds__extract_month AS metric_time__extract_month + , subq_0.third_hop_ds__extract_day AS metric_time__extract_day + , subq_0.third_hop_ds__extract_dow AS metric_time__extract_dow + , subq_0.third_hop_ds__extract_doy AS metric_time__extract_doy + , subq_0.customer_third_hop_id + , subq_0.value + , subq_0.customer_third_hop_id__value + , subq_0.third_hop_count + FROM ( + -- Read Elements From Semantic Model 'third_hop_table' + SELECT + third_hop_table_src_22000.customer_third_hop_id AS third_hop_count + , third_hop_table_src_22000.value + , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day + , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week + , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month + , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter + , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year + , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year + , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter + , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month + , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day + , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow + , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy + , third_hop_table_src_22000.value AS customer_third_hop_id__value + , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day + , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week + , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month + , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter + , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year + , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year + , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter + , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month + , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day + , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow + , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy + , third_hop_table_src_22000.customer_third_hop_id + FROM ***************************.third_hop_table third_hop_table_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['account_id__customer_id__customer_third_hop_id', 'account_id__customer_id__customer_third_hop_id__txn_count'] + SELECT + subq_14.account_id__customer_id__customer_third_hop_id + , subq_14.account_id__customer_id__customer_third_hop_id__txn_count + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_13.account_id__customer_id__customer_third_hop_id + , subq_13.txn_count AS account_id__customer_id__customer_third_hop_id__txn_count + FROM ( + -- Aggregate Measures + SELECT + subq_12.account_id__customer_id__customer_third_hop_id + , SUM(subq_12.txn_count) AS txn_count + FROM ( + -- Pass Only Elements: ['txn_count', 'account_id__customer_id__customer_third_hop_id'] + SELECT + subq_11.account_id__customer_id__customer_third_hop_id + , subq_11.txn_count + FROM ( + -- Join Standard Outputs + SELECT + subq_10.ds_partitioned__day AS account_id__ds_partitioned__day + , subq_10.customer_id__customer_third_hop_id AS account_id__customer_id__customer_third_hop_id + , subq_3.ds_partitioned__day AS ds_partitioned__day + , subq_3.ds_partitioned__week AS ds_partitioned__week + , subq_3.ds_partitioned__month AS ds_partitioned__month + , subq_3.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_3.ds_partitioned__year AS ds_partitioned__year + , subq_3.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_3.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_3.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_3.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_3.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_3.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_3.ds__day AS ds__day + , subq_3.ds__week AS ds__week + , subq_3.ds__month AS ds__month + , subq_3.ds__quarter AS ds__quarter + , subq_3.ds__year AS ds__year + , subq_3.ds__extract_year AS ds__extract_year + , subq_3.ds__extract_quarter AS ds__extract_quarter + , subq_3.ds__extract_month AS ds__extract_month + , subq_3.ds__extract_day AS ds__extract_day + , subq_3.ds__extract_dow AS ds__extract_dow + , subq_3.ds__extract_doy AS ds__extract_doy + , subq_3.account_id__ds_partitioned__day AS account_id__ds_partitioned__day + , subq_3.account_id__ds_partitioned__week AS account_id__ds_partitioned__week + , subq_3.account_id__ds_partitioned__month AS account_id__ds_partitioned__month + , subq_3.account_id__ds_partitioned__quarter AS account_id__ds_partitioned__quarter + , subq_3.account_id__ds_partitioned__year AS account_id__ds_partitioned__year + , subq_3.account_id__ds_partitioned__extract_year AS account_id__ds_partitioned__extract_year + , subq_3.account_id__ds_partitioned__extract_quarter AS account_id__ds_partitioned__extract_quarter + , subq_3.account_id__ds_partitioned__extract_month AS account_id__ds_partitioned__extract_month + , subq_3.account_id__ds_partitioned__extract_day AS account_id__ds_partitioned__extract_day + , subq_3.account_id__ds_partitioned__extract_dow AS account_id__ds_partitioned__extract_dow + , subq_3.account_id__ds_partitioned__extract_doy AS account_id__ds_partitioned__extract_doy + , subq_3.account_id__ds__day AS account_id__ds__day + , subq_3.account_id__ds__week AS account_id__ds__week + , subq_3.account_id__ds__month AS account_id__ds__month + , subq_3.account_id__ds__quarter AS account_id__ds__quarter + , subq_3.account_id__ds__year AS account_id__ds__year + , subq_3.account_id__ds__extract_year AS account_id__ds__extract_year + , subq_3.account_id__ds__extract_quarter AS account_id__ds__extract_quarter + , subq_3.account_id__ds__extract_month AS account_id__ds__extract_month + , subq_3.account_id__ds__extract_day AS account_id__ds__extract_day + , subq_3.account_id__ds__extract_dow AS account_id__ds__extract_dow + , subq_3.account_id__ds__extract_doy AS account_id__ds__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_3.metric_time__week AS metric_time__week + , subq_3.metric_time__month AS metric_time__month + , subq_3.metric_time__quarter AS metric_time__quarter + , subq_3.metric_time__year AS metric_time__year + , subq_3.metric_time__extract_year AS metric_time__extract_year + , subq_3.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_3.metric_time__extract_month AS metric_time__extract_month + , subq_3.metric_time__extract_day AS metric_time__extract_day + , subq_3.metric_time__extract_dow AS metric_time__extract_dow + , subq_3.metric_time__extract_doy AS metric_time__extract_doy + , subq_3.account_id AS account_id + , subq_3.account_month AS account_month + , subq_3.account_id__account_month AS account_id__account_month + , subq_3.txn_count AS txn_count + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.account_id__ds_partitioned__day + , subq_2.account_id__ds_partitioned__week + , subq_2.account_id__ds_partitioned__month + , subq_2.account_id__ds_partitioned__quarter + , subq_2.account_id__ds_partitioned__year + , subq_2.account_id__ds_partitioned__extract_year + , subq_2.account_id__ds_partitioned__extract_quarter + , subq_2.account_id__ds_partitioned__extract_month + , subq_2.account_id__ds_partitioned__extract_day + , subq_2.account_id__ds_partitioned__extract_dow + , subq_2.account_id__ds_partitioned__extract_doy + , subq_2.account_id__ds__day + , subq_2.account_id__ds__week + , subq_2.account_id__ds__month + , subq_2.account_id__ds__quarter + , subq_2.account_id__ds__year + , subq_2.account_id__ds__extract_year + , subq_2.account_id__ds__extract_quarter + , subq_2.account_id__ds__extract_month + , subq_2.account_id__ds__extract_day + , subq_2.account_id__ds__extract_dow + , subq_2.account_id__ds__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.account_id + , subq_2.account_month + , subq_2.account_id__account_month + , subq_2.txn_count + FROM ( + -- Read Elements From Semantic Model 'account_month_txns' + SELECT + account_month_txns_src_22000.txn_count + , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS ds__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS ds__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS ds__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS ds__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS ds__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS ds__extract_doy + , account_month_txns_src_22000.account_month + , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS account_id__ds__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS account_id__ds__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS account_id__ds__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS account_id__ds__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_doy + , account_month_txns_src_22000.account_month AS account_id__account_month + , account_month_txns_src_22000.account_id + FROM ***************************.account_month_txns account_month_txns_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['ds_partitioned__day', 'account_id', 'customer_id__customer_third_hop_id'] + SELECT + subq_9.ds_partitioned__day + , subq_9.account_id + , subq_9.customer_id__customer_third_hop_id + FROM ( + -- Join Standard Outputs + SELECT + subq_8.country AS customer_id__country + , subq_8.customer_third_hop_id__country AS customer_id__customer_third_hop_id__country + , subq_8.acquired_ds__day AS customer_id__acquired_ds__day + , subq_8.acquired_ds__week AS customer_id__acquired_ds__week + , subq_8.acquired_ds__month AS customer_id__acquired_ds__month + , subq_8.acquired_ds__quarter AS customer_id__acquired_ds__quarter + , subq_8.acquired_ds__year AS customer_id__acquired_ds__year + , subq_8.acquired_ds__extract_year AS customer_id__acquired_ds__extract_year + , subq_8.acquired_ds__extract_quarter AS customer_id__acquired_ds__extract_quarter + , subq_8.acquired_ds__extract_month AS customer_id__acquired_ds__extract_month + , subq_8.acquired_ds__extract_day AS customer_id__acquired_ds__extract_day + , subq_8.acquired_ds__extract_dow AS customer_id__acquired_ds__extract_dow + , subq_8.acquired_ds__extract_doy AS customer_id__acquired_ds__extract_doy + , subq_8.customer_third_hop_id__acquired_ds__day AS customer_id__customer_third_hop_id__acquired_ds__day + , subq_8.customer_third_hop_id__acquired_ds__week AS customer_id__customer_third_hop_id__acquired_ds__week + , subq_8.customer_third_hop_id__acquired_ds__month AS customer_id__customer_third_hop_id__acquired_ds__month + , subq_8.customer_third_hop_id__acquired_ds__quarter AS customer_id__customer_third_hop_id__acquired_ds__quarter + , subq_8.customer_third_hop_id__acquired_ds__year AS customer_id__customer_third_hop_id__acquired_ds__year + , subq_8.customer_third_hop_id__acquired_ds__extract_year AS customer_id__customer_third_hop_id__acquired_ds__extract_year + , subq_8.customer_third_hop_id__acquired_ds__extract_quarter AS customer_id__customer_third_hop_id__acquired_ds__extract_quarter + , subq_8.customer_third_hop_id__acquired_ds__extract_month AS customer_id__customer_third_hop_id__acquired_ds__extract_month + , subq_8.customer_third_hop_id__acquired_ds__extract_day AS customer_id__customer_third_hop_id__acquired_ds__extract_day + , subq_8.customer_third_hop_id__acquired_ds__extract_dow AS customer_id__customer_third_hop_id__acquired_ds__extract_dow + , subq_8.customer_third_hop_id__acquired_ds__extract_doy AS customer_id__customer_third_hop_id__acquired_ds__extract_doy + , subq_8.metric_time__day AS customer_id__metric_time__day + , subq_8.metric_time__week AS customer_id__metric_time__week + , subq_8.metric_time__month AS customer_id__metric_time__month + , subq_8.metric_time__quarter AS customer_id__metric_time__quarter + , subq_8.metric_time__year AS customer_id__metric_time__year + , subq_8.metric_time__extract_year AS customer_id__metric_time__extract_year + , subq_8.metric_time__extract_quarter AS customer_id__metric_time__extract_quarter + , subq_8.metric_time__extract_month AS customer_id__metric_time__extract_month + , subq_8.metric_time__extract_day AS customer_id__metric_time__extract_day + , subq_8.metric_time__extract_dow AS customer_id__metric_time__extract_dow + , subq_8.metric_time__extract_doy AS customer_id__metric_time__extract_doy + , subq_8.customer_third_hop_id AS customer_id__customer_third_hop_id + , subq_8.customer_third_hop_id__customer_id AS customer_id__customer_third_hop_id__customer_id + , subq_5.ds_partitioned__day AS ds_partitioned__day + , subq_5.ds_partitioned__week AS ds_partitioned__week + , subq_5.ds_partitioned__month AS ds_partitioned__month + , subq_5.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_5.ds_partitioned__year AS ds_partitioned__year + , subq_5.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_5.account_id__ds_partitioned__day AS account_id__ds_partitioned__day + , subq_5.account_id__ds_partitioned__week AS account_id__ds_partitioned__week + , subq_5.account_id__ds_partitioned__month AS account_id__ds_partitioned__month + , subq_5.account_id__ds_partitioned__quarter AS account_id__ds_partitioned__quarter + , subq_5.account_id__ds_partitioned__year AS account_id__ds_partitioned__year + , subq_5.account_id__ds_partitioned__extract_year AS account_id__ds_partitioned__extract_year + , subq_5.account_id__ds_partitioned__extract_quarter AS account_id__ds_partitioned__extract_quarter + , subq_5.account_id__ds_partitioned__extract_month AS account_id__ds_partitioned__extract_month + , subq_5.account_id__ds_partitioned__extract_day AS account_id__ds_partitioned__extract_day + , subq_5.account_id__ds_partitioned__extract_dow AS account_id__ds_partitioned__extract_dow + , subq_5.account_id__ds_partitioned__extract_doy AS account_id__ds_partitioned__extract_doy + , subq_5.bridge_account__ds_partitioned__day AS bridge_account__ds_partitioned__day + , subq_5.bridge_account__ds_partitioned__week AS bridge_account__ds_partitioned__week + , subq_5.bridge_account__ds_partitioned__month AS bridge_account__ds_partitioned__month + , subq_5.bridge_account__ds_partitioned__quarter AS bridge_account__ds_partitioned__quarter + , subq_5.bridge_account__ds_partitioned__year AS bridge_account__ds_partitioned__year + , subq_5.bridge_account__ds_partitioned__extract_year AS bridge_account__ds_partitioned__extract_year + , subq_5.bridge_account__ds_partitioned__extract_quarter AS bridge_account__ds_partitioned__extract_quarter + , subq_5.bridge_account__ds_partitioned__extract_month AS bridge_account__ds_partitioned__extract_month + , subq_5.bridge_account__ds_partitioned__extract_day AS bridge_account__ds_partitioned__extract_day + , subq_5.bridge_account__ds_partitioned__extract_dow AS bridge_account__ds_partitioned__extract_dow + , subq_5.bridge_account__ds_partitioned__extract_doy AS bridge_account__ds_partitioned__extract_doy + , subq_5.metric_time__day AS metric_time__day + , subq_5.metric_time__week AS metric_time__week + , subq_5.metric_time__month AS metric_time__month + , subq_5.metric_time__quarter AS metric_time__quarter + , subq_5.metric_time__year AS metric_time__year + , subq_5.metric_time__extract_year AS metric_time__extract_year + , subq_5.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_5.metric_time__extract_month AS metric_time__extract_month + , subq_5.metric_time__extract_day AS metric_time__extract_day + , subq_5.metric_time__extract_dow AS metric_time__extract_dow + , subq_5.metric_time__extract_doy AS metric_time__extract_doy + , subq_5.account_id AS account_id + , subq_5.customer_id AS customer_id + , subq_5.account_id__customer_id AS account_id__customer_id + , subq_5.bridge_account__account_id AS bridge_account__account_id + , subq_5.bridge_account__customer_id AS bridge_account__customer_id + , subq_5.extra_dim AS extra_dim + , subq_5.account_id__extra_dim AS account_id__extra_dim + , subq_5.bridge_account__extra_dim AS bridge_account__extra_dim + , subq_5.account_customer_combos AS account_customer_combos + FROM ( + -- Metric Time Dimension 'ds_partitioned' + SELECT + subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.account_id__ds_partitioned__day + , subq_4.account_id__ds_partitioned__week + , subq_4.account_id__ds_partitioned__month + , subq_4.account_id__ds_partitioned__quarter + , subq_4.account_id__ds_partitioned__year + , subq_4.account_id__ds_partitioned__extract_year + , subq_4.account_id__ds_partitioned__extract_quarter + , subq_4.account_id__ds_partitioned__extract_month + , subq_4.account_id__ds_partitioned__extract_day + , subq_4.account_id__ds_partitioned__extract_dow + , subq_4.account_id__ds_partitioned__extract_doy + , subq_4.bridge_account__ds_partitioned__day + , subq_4.bridge_account__ds_partitioned__week + , subq_4.bridge_account__ds_partitioned__month + , subq_4.bridge_account__ds_partitioned__quarter + , subq_4.bridge_account__ds_partitioned__year + , subq_4.bridge_account__ds_partitioned__extract_year + , subq_4.bridge_account__ds_partitioned__extract_quarter + , subq_4.bridge_account__ds_partitioned__extract_month + , subq_4.bridge_account__ds_partitioned__extract_day + , subq_4.bridge_account__ds_partitioned__extract_dow + , subq_4.bridge_account__ds_partitioned__extract_doy + , subq_4.ds_partitioned__day AS metric_time__day + , subq_4.ds_partitioned__week AS metric_time__week + , subq_4.ds_partitioned__month AS metric_time__month + , subq_4.ds_partitioned__quarter AS metric_time__quarter + , subq_4.ds_partitioned__year AS metric_time__year + , subq_4.ds_partitioned__extract_year AS metric_time__extract_year + , subq_4.ds_partitioned__extract_quarter AS metric_time__extract_quarter + , subq_4.ds_partitioned__extract_month AS metric_time__extract_month + , subq_4.ds_partitioned__extract_day AS metric_time__extract_day + , subq_4.ds_partitioned__extract_dow AS metric_time__extract_dow + , subq_4.ds_partitioned__extract_doy AS metric_time__extract_doy + , subq_4.account_id + , subq_4.customer_id + , subq_4.account_id__customer_id + , subq_4.bridge_account__account_id + , subq_4.bridge_account__customer_id + , subq_4.extra_dim + , subq_4.account_id__extra_dim + , subq_4.bridge_account__extra_dim + , subq_4.account_customer_combos + FROM ( + -- Read Elements From Semantic Model 'bridge_table' + SELECT + account_id || customer_id AS account_customer_combos + , bridge_table_src_22000.extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , bridge_table_src_22000.extra_dim AS account_id__extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , bridge_table_src_22000.extra_dim AS bridge_account__extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy + , bridge_table_src_22000.account_id + , bridge_table_src_22000.customer_id + , bridge_table_src_22000.customer_id AS account_id__customer_id + , bridge_table_src_22000.account_id AS bridge_account__account_id + , bridge_table_src_22000.customer_id AS bridge_account__customer_id + FROM ***************************.bridge_table bridge_table_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'country', + -- 'customer_id__country', + -- 'customer_third_hop_id__country', + -- 'acquired_ds__day', + -- 'acquired_ds__week', + -- 'acquired_ds__month', + -- 'acquired_ds__quarter', + -- 'acquired_ds__year', + -- 'acquired_ds__extract_year', + -- 'acquired_ds__extract_quarter', + -- 'acquired_ds__extract_month', + -- 'acquired_ds__extract_day', + -- 'acquired_ds__extract_dow', + -- 'acquired_ds__extract_doy', + -- 'customer_id__acquired_ds__day', + -- 'customer_id__acquired_ds__week', + -- 'customer_id__acquired_ds__month', + -- 'customer_id__acquired_ds__quarter', + -- 'customer_id__acquired_ds__year', + -- 'customer_id__acquired_ds__extract_year', + -- 'customer_id__acquired_ds__extract_quarter', + -- 'customer_id__acquired_ds__extract_month', + -- 'customer_id__acquired_ds__extract_day', + -- 'customer_id__acquired_ds__extract_dow', + -- 'customer_id__acquired_ds__extract_doy', + -- 'customer_third_hop_id__acquired_ds__day', + -- 'customer_third_hop_id__acquired_ds__week', + -- 'customer_third_hop_id__acquired_ds__month', + -- 'customer_third_hop_id__acquired_ds__quarter', + -- 'customer_third_hop_id__acquired_ds__year', + -- 'customer_third_hop_id__acquired_ds__extract_year', + -- 'customer_third_hop_id__acquired_ds__extract_quarter', + -- 'customer_third_hop_id__acquired_ds__extract_month', + -- 'customer_third_hop_id__acquired_ds__extract_day', + -- 'customer_third_hop_id__acquired_ds__extract_dow', + -- 'customer_third_hop_id__acquired_ds__extract_doy', + -- 'metric_time__day', + -- 'metric_time__week', + -- 'metric_time__month', + -- 'metric_time__quarter', + -- 'metric_time__year', + -- 'metric_time__extract_year', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_month', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'customer_id', + -- 'customer_third_hop_id', + -- 'customer_id__customer_third_hop_id', + -- 'customer_third_hop_id__customer_id', + -- ] + SELECT + subq_7.acquired_ds__day + , subq_7.acquired_ds__week + , subq_7.acquired_ds__month + , subq_7.acquired_ds__quarter + , subq_7.acquired_ds__year + , subq_7.acquired_ds__extract_year + , subq_7.acquired_ds__extract_quarter + , subq_7.acquired_ds__extract_month + , subq_7.acquired_ds__extract_day + , subq_7.acquired_ds__extract_dow + , subq_7.acquired_ds__extract_doy + , subq_7.customer_id__acquired_ds__day + , subq_7.customer_id__acquired_ds__week + , subq_7.customer_id__acquired_ds__month + , subq_7.customer_id__acquired_ds__quarter + , subq_7.customer_id__acquired_ds__year + , subq_7.customer_id__acquired_ds__extract_year + , subq_7.customer_id__acquired_ds__extract_quarter + , subq_7.customer_id__acquired_ds__extract_month + , subq_7.customer_id__acquired_ds__extract_day + , subq_7.customer_id__acquired_ds__extract_dow + , subq_7.customer_id__acquired_ds__extract_doy + , subq_7.customer_third_hop_id__acquired_ds__day + , subq_7.customer_third_hop_id__acquired_ds__week + , subq_7.customer_third_hop_id__acquired_ds__month + , subq_7.customer_third_hop_id__acquired_ds__quarter + , subq_7.customer_third_hop_id__acquired_ds__year + , subq_7.customer_third_hop_id__acquired_ds__extract_year + , subq_7.customer_third_hop_id__acquired_ds__extract_quarter + , subq_7.customer_third_hop_id__acquired_ds__extract_month + , subq_7.customer_third_hop_id__acquired_ds__extract_day + , subq_7.customer_third_hop_id__acquired_ds__extract_dow + , subq_7.customer_third_hop_id__acquired_ds__extract_doy + , subq_7.metric_time__day + , subq_7.metric_time__week + , subq_7.metric_time__month + , subq_7.metric_time__quarter + , subq_7.metric_time__year + , subq_7.metric_time__extract_year + , subq_7.metric_time__extract_quarter + , subq_7.metric_time__extract_month + , subq_7.metric_time__extract_day + , subq_7.metric_time__extract_dow + , subq_7.metric_time__extract_doy + , subq_7.customer_id + , subq_7.customer_third_hop_id + , subq_7.customer_id__customer_third_hop_id + , subq_7.customer_third_hop_id__customer_id + , subq_7.country + , subq_7.customer_id__country + , subq_7.customer_third_hop_id__country + FROM ( + -- Metric Time Dimension 'acquired_ds' + SELECT + subq_6.acquired_ds__day + , subq_6.acquired_ds__week + , subq_6.acquired_ds__month + , subq_6.acquired_ds__quarter + , subq_6.acquired_ds__year + , subq_6.acquired_ds__extract_year + , subq_6.acquired_ds__extract_quarter + , subq_6.acquired_ds__extract_month + , subq_6.acquired_ds__extract_day + , subq_6.acquired_ds__extract_dow + , subq_6.acquired_ds__extract_doy + , subq_6.customer_id__acquired_ds__day + , subq_6.customer_id__acquired_ds__week + , subq_6.customer_id__acquired_ds__month + , subq_6.customer_id__acquired_ds__quarter + , subq_6.customer_id__acquired_ds__year + , subq_6.customer_id__acquired_ds__extract_year + , subq_6.customer_id__acquired_ds__extract_quarter + , subq_6.customer_id__acquired_ds__extract_month + , subq_6.customer_id__acquired_ds__extract_day + , subq_6.customer_id__acquired_ds__extract_dow + , subq_6.customer_id__acquired_ds__extract_doy + , subq_6.customer_third_hop_id__acquired_ds__day + , subq_6.customer_third_hop_id__acquired_ds__week + , subq_6.customer_third_hop_id__acquired_ds__month + , subq_6.customer_third_hop_id__acquired_ds__quarter + , subq_6.customer_third_hop_id__acquired_ds__year + , subq_6.customer_third_hop_id__acquired_ds__extract_year + , subq_6.customer_third_hop_id__acquired_ds__extract_quarter + , subq_6.customer_third_hop_id__acquired_ds__extract_month + , subq_6.customer_third_hop_id__acquired_ds__extract_day + , subq_6.customer_third_hop_id__acquired_ds__extract_dow + , subq_6.customer_third_hop_id__acquired_ds__extract_doy + , subq_6.acquired_ds__day AS metric_time__day + , subq_6.acquired_ds__week AS metric_time__week + , subq_6.acquired_ds__month AS metric_time__month + , subq_6.acquired_ds__quarter AS metric_time__quarter + , subq_6.acquired_ds__year AS metric_time__year + , subq_6.acquired_ds__extract_year AS metric_time__extract_year + , subq_6.acquired_ds__extract_quarter AS metric_time__extract_quarter + , subq_6.acquired_ds__extract_month AS metric_time__extract_month + , subq_6.acquired_ds__extract_day AS metric_time__extract_day + , subq_6.acquired_ds__extract_dow AS metric_time__extract_dow + , subq_6.acquired_ds__extract_doy AS metric_time__extract_doy + , subq_6.customer_id + , subq_6.customer_third_hop_id + , subq_6.customer_id__customer_third_hop_id + , subq_6.customer_third_hop_id__customer_id + , subq_6.country + , subq_6.customer_id__country + , subq_6.customer_third_hop_id__country + , subq_6.customers_with_other_data + FROM ( + -- Read Elements From Semantic Model 'customer_other_data' + SELECT + 1 AS customers_with_other_data + , customer_other_data_src_22000.country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy + , customer_other_data_src_22000.country AS customer_id__country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy + , customer_other_data_src_22000.country AS customer_third_hop_id__country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy + , customer_other_data_src_22000.customer_id + , customer_other_data_src_22000.customer_third_hop_id + , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id + , customer_other_data_src_22000.customer_id AS customer_third_hop_id__customer_id + FROM ***************************.customer_other_data customer_other_data_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + subq_5.customer_id = subq_8.customer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + ( + subq_3.account_id = subq_10.account_id + ) AND ( + subq_3.ds_partitioned__day = subq_10.ds_partitioned__day + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + GROUP BY + subq_12.account_id__customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_1.customer_third_hop_id = subq_15.account_id__customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql new file mode 100644 index 0000000000..07e56b938c --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql @@ -0,0 +1,60 @@ +test_name: test_inner_query_multi_hop +test_filename: test_metric_filter_rendering.py +docstring: + Tests rendering for a metric filter using a two-hop join in the inner query. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['third_hop_count',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + COUNT(DISTINCT third_hop_count) AS third_hop_count +FROM ( + -- Join Standard Outputs + SELECT + subq_35.account_id__customer_id__customer_third_hop_id__txn_count AS customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count + , third_hop_table_src_22000.customer_third_hop_id AS third_hop_count + FROM ***************************.third_hop_table third_hop_table_src_22000 + LEFT OUTER JOIN + ( + -- Join Standard Outputs + -- Pass Only Elements: ['txn_count', 'account_id__customer_id__customer_third_hop_id'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['account_id__customer_id__customer_third_hop_id', 'account_id__customer_id__customer_third_hop_id__txn_count'] + SELECT + subq_30.customer_id__customer_third_hop_id AS account_id__customer_id__customer_third_hop_id + , SUM(account_month_txns_src_22000.txn_count) AS account_id__customer_id__customer_third_hop_id__txn_count + FROM ***************************.account_month_txns account_month_txns_src_22000 + LEFT OUTER JOIN + ( + -- Join Standard Outputs + -- Pass Only Elements: ['ds_partitioned__day', 'account_id', 'customer_id__customer_third_hop_id'] + SELECT + DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , bridge_table_src_22000.account_id AS account_id + , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id + FROM ***************************.bridge_table bridge_table_src_22000 + LEFT OUTER JOIN + ***************************.customer_other_data customer_other_data_src_22000 + ON + bridge_table_src_22000.customer_id = customer_other_data_src_22000.customer_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + ON + ( + account_month_txns_src_22000.account_id = subq_30.account_id + ) AND ( + DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) = subq_30.ds_partitioned__day + ) + GROUP BY + subq_30.customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + ON + third_hop_table_src_22000.customer_third_hop_id = subq_35.account_id__customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_36 +WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql new file mode 100644 index 0000000000..617a52e6f7 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql @@ -0,0 +1,380 @@ +test_name: test_inner_query_single_hop +test_filename: test_metric_filter_rendering.py +docstring: + Tests rendering for a metric filter using a one-hop join in the inner query. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_12.third_hop_count +FROM ( + -- Aggregate Measures + SELECT + COUNT(DISTINCT subq_11.third_hop_count) AS third_hop_count + FROM ( + -- Pass Only Elements: ['third_hop_count',] + SELECT + subq_10.third_hop_count + FROM ( + -- Constrain Output with WHERE + SELECT + subq_9.third_hop_ds__day + , subq_9.third_hop_ds__week + , subq_9.third_hop_ds__month + , subq_9.third_hop_ds__quarter + , subq_9.third_hop_ds__year + , subq_9.third_hop_ds__extract_year + , subq_9.third_hop_ds__extract_quarter + , subq_9.third_hop_ds__extract_month + , subq_9.third_hop_ds__extract_day + , subq_9.third_hop_ds__extract_dow + , subq_9.third_hop_ds__extract_doy + , subq_9.customer_third_hop_id__third_hop_ds__day + , subq_9.customer_third_hop_id__third_hop_ds__week + , subq_9.customer_third_hop_id__third_hop_ds__month + , subq_9.customer_third_hop_id__third_hop_ds__quarter + , subq_9.customer_third_hop_id__third_hop_ds__year + , subq_9.customer_third_hop_id__third_hop_ds__extract_year + , subq_9.customer_third_hop_id__third_hop_ds__extract_quarter + , subq_9.customer_third_hop_id__third_hop_ds__extract_month + , subq_9.customer_third_hop_id__third_hop_ds__extract_day + , subq_9.customer_third_hop_id__third_hop_ds__extract_dow + , subq_9.customer_third_hop_id__third_hop_ds__extract_doy + , subq_9.metric_time__day + , subq_9.metric_time__week + , subq_9.metric_time__month + , subq_9.metric_time__quarter + , subq_9.metric_time__year + , subq_9.metric_time__extract_year + , subq_9.metric_time__extract_quarter + , subq_9.metric_time__extract_month + , subq_9.metric_time__extract_day + , subq_9.metric_time__extract_dow + , subq_9.metric_time__extract_doy + , subq_9.customer_third_hop_id + , subq_9.customer_third_hop_id__customer_id__customer_third_hop_id + , subq_9.value + , subq_9.customer_third_hop_id__value + , subq_9.customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers + , subq_9.third_hop_count + FROM ( + -- Join Standard Outputs + SELECT + subq_8.customer_id__customer_third_hop_id AS customer_third_hop_id__customer_id__customer_third_hop_id + , subq_8.customer_id__customer_third_hop_id__paraguayan_customers AS customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers + , subq_1.third_hop_ds__day AS third_hop_ds__day + , subq_1.third_hop_ds__week AS third_hop_ds__week + , subq_1.third_hop_ds__month AS third_hop_ds__month + , subq_1.third_hop_ds__quarter AS third_hop_ds__quarter + , subq_1.third_hop_ds__year AS third_hop_ds__year + , subq_1.third_hop_ds__extract_year AS third_hop_ds__extract_year + , subq_1.third_hop_ds__extract_quarter AS third_hop_ds__extract_quarter + , subq_1.third_hop_ds__extract_month AS third_hop_ds__extract_month + , subq_1.third_hop_ds__extract_day AS third_hop_ds__extract_day + , subq_1.third_hop_ds__extract_dow AS third_hop_ds__extract_dow + , subq_1.third_hop_ds__extract_doy AS third_hop_ds__extract_doy + , subq_1.customer_third_hop_id__third_hop_ds__day AS customer_third_hop_id__third_hop_ds__day + , subq_1.customer_third_hop_id__third_hop_ds__week AS customer_third_hop_id__third_hop_ds__week + , subq_1.customer_third_hop_id__third_hop_ds__month AS customer_third_hop_id__third_hop_ds__month + , subq_1.customer_third_hop_id__third_hop_ds__quarter AS customer_third_hop_id__third_hop_ds__quarter + , subq_1.customer_third_hop_id__third_hop_ds__year AS customer_third_hop_id__third_hop_ds__year + , subq_1.customer_third_hop_id__third_hop_ds__extract_year AS customer_third_hop_id__third_hop_ds__extract_year + , subq_1.customer_third_hop_id__third_hop_ds__extract_quarter AS customer_third_hop_id__third_hop_ds__extract_quarter + , subq_1.customer_third_hop_id__third_hop_ds__extract_month AS customer_third_hop_id__third_hop_ds__extract_month + , subq_1.customer_third_hop_id__third_hop_ds__extract_day AS customer_third_hop_id__third_hop_ds__extract_day + , subq_1.customer_third_hop_id__third_hop_ds__extract_dow AS customer_third_hop_id__third_hop_ds__extract_dow + , subq_1.customer_third_hop_id__third_hop_ds__extract_doy AS customer_third_hop_id__third_hop_ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.customer_third_hop_id AS customer_third_hop_id + , subq_1.value AS value + , subq_1.customer_third_hop_id__value AS customer_third_hop_id__value + , subq_1.third_hop_count AS third_hop_count + FROM ( + -- Metric Time Dimension 'third_hop_ds' + SELECT + subq_0.third_hop_ds__day + , subq_0.third_hop_ds__week + , subq_0.third_hop_ds__month + , subq_0.third_hop_ds__quarter + , subq_0.third_hop_ds__year + , subq_0.third_hop_ds__extract_year + , subq_0.third_hop_ds__extract_quarter + , subq_0.third_hop_ds__extract_month + , subq_0.third_hop_ds__extract_day + , subq_0.third_hop_ds__extract_dow + , subq_0.third_hop_ds__extract_doy + , subq_0.customer_third_hop_id__third_hop_ds__day + , subq_0.customer_third_hop_id__third_hop_ds__week + , subq_0.customer_third_hop_id__third_hop_ds__month + , subq_0.customer_third_hop_id__third_hop_ds__quarter + , subq_0.customer_third_hop_id__third_hop_ds__year + , subq_0.customer_third_hop_id__third_hop_ds__extract_year + , subq_0.customer_third_hop_id__third_hop_ds__extract_quarter + , subq_0.customer_third_hop_id__third_hop_ds__extract_month + , subq_0.customer_third_hop_id__third_hop_ds__extract_day + , subq_0.customer_third_hop_id__third_hop_ds__extract_dow + , subq_0.customer_third_hop_id__third_hop_ds__extract_doy + , subq_0.third_hop_ds__day AS metric_time__day + , subq_0.third_hop_ds__week AS metric_time__week + , subq_0.third_hop_ds__month AS metric_time__month + , subq_0.third_hop_ds__quarter AS metric_time__quarter + , subq_0.third_hop_ds__year AS metric_time__year + , subq_0.third_hop_ds__extract_year AS metric_time__extract_year + , subq_0.third_hop_ds__extract_quarter AS metric_time__extract_quarter + , subq_0.third_hop_ds__extract_month AS metric_time__extract_month + , subq_0.third_hop_ds__extract_day AS metric_time__extract_day + , subq_0.third_hop_ds__extract_dow AS metric_time__extract_dow + , subq_0.third_hop_ds__extract_doy AS metric_time__extract_doy + , subq_0.customer_third_hop_id + , subq_0.value + , subq_0.customer_third_hop_id__value + , subq_0.third_hop_count + FROM ( + -- Read Elements From Semantic Model 'third_hop_table' + SELECT + third_hop_table_src_22000.customer_third_hop_id AS third_hop_count + , third_hop_table_src_22000.value + , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day + , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week + , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month + , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter + , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year + , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year + , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter + , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month + , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day + , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow + , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy + , third_hop_table_src_22000.value AS customer_third_hop_id__value + , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day + , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week + , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month + , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter + , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year + , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year + , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter + , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month + , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day + , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow + , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy + , third_hop_table_src_22000.customer_third_hop_id + FROM ***************************.third_hop_table third_hop_table_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['customer_id__customer_third_hop_id', 'customer_id__customer_third_hop_id__paraguayan_customers'] + SELECT + subq_7.customer_id__customer_third_hop_id + , subq_7.customer_id__customer_third_hop_id__paraguayan_customers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_6.customer_id__customer_third_hop_id + , subq_6.customers_with_other_data AS customer_id__customer_third_hop_id__paraguayan_customers + FROM ( + -- Aggregate Measures + SELECT + subq_5.customer_id__customer_third_hop_id + , SUM(subq_5.customers_with_other_data) AS customers_with_other_data + FROM ( + -- Pass Only Elements: ['customers_with_other_data', 'customer_id__customer_third_hop_id'] + SELECT + subq_4.customer_id__customer_third_hop_id + , subq_4.customers_with_other_data + FROM ( + -- Constrain Output with WHERE + SELECT + subq_3.acquired_ds__day + , subq_3.acquired_ds__week + , subq_3.acquired_ds__month + , subq_3.acquired_ds__quarter + , subq_3.acquired_ds__year + , subq_3.acquired_ds__extract_year + , subq_3.acquired_ds__extract_quarter + , subq_3.acquired_ds__extract_month + , subq_3.acquired_ds__extract_day + , subq_3.acquired_ds__extract_dow + , subq_3.acquired_ds__extract_doy + , subq_3.customer_id__acquired_ds__day + , subq_3.customer_id__acquired_ds__week + , subq_3.customer_id__acquired_ds__month + , subq_3.customer_id__acquired_ds__quarter + , subq_3.customer_id__acquired_ds__year + , subq_3.customer_id__acquired_ds__extract_year + , subq_3.customer_id__acquired_ds__extract_quarter + , subq_3.customer_id__acquired_ds__extract_month + , subq_3.customer_id__acquired_ds__extract_day + , subq_3.customer_id__acquired_ds__extract_dow + , subq_3.customer_id__acquired_ds__extract_doy + , subq_3.customer_third_hop_id__acquired_ds__day + , subq_3.customer_third_hop_id__acquired_ds__week + , subq_3.customer_third_hop_id__acquired_ds__month + , subq_3.customer_third_hop_id__acquired_ds__quarter + , subq_3.customer_third_hop_id__acquired_ds__year + , subq_3.customer_third_hop_id__acquired_ds__extract_year + , subq_3.customer_third_hop_id__acquired_ds__extract_quarter + , subq_3.customer_third_hop_id__acquired_ds__extract_month + , subq_3.customer_third_hop_id__acquired_ds__extract_day + , subq_3.customer_third_hop_id__acquired_ds__extract_dow + , subq_3.customer_third_hop_id__acquired_ds__extract_doy + , subq_3.metric_time__day + , subq_3.metric_time__week + , subq_3.metric_time__month + , subq_3.metric_time__quarter + , subq_3.metric_time__year + , subq_3.metric_time__extract_year + , subq_3.metric_time__extract_quarter + , subq_3.metric_time__extract_month + , subq_3.metric_time__extract_day + , subq_3.metric_time__extract_dow + , subq_3.metric_time__extract_doy + , subq_3.customer_id + , subq_3.customer_third_hop_id + , subq_3.customer_id__customer_third_hop_id + , subq_3.customer_third_hop_id__customer_id + , subq_3.country + , subq_3.customer_id__country + , subq_3.customer_third_hop_id__country + , subq_3.customers_with_other_data + FROM ( + -- Metric Time Dimension 'acquired_ds' + SELECT + subq_2.acquired_ds__day + , subq_2.acquired_ds__week + , subq_2.acquired_ds__month + , subq_2.acquired_ds__quarter + , subq_2.acquired_ds__year + , subq_2.acquired_ds__extract_year + , subq_2.acquired_ds__extract_quarter + , subq_2.acquired_ds__extract_month + , subq_2.acquired_ds__extract_day + , subq_2.acquired_ds__extract_dow + , subq_2.acquired_ds__extract_doy + , subq_2.customer_id__acquired_ds__day + , subq_2.customer_id__acquired_ds__week + , subq_2.customer_id__acquired_ds__month + , subq_2.customer_id__acquired_ds__quarter + , subq_2.customer_id__acquired_ds__year + , subq_2.customer_id__acquired_ds__extract_year + , subq_2.customer_id__acquired_ds__extract_quarter + , subq_2.customer_id__acquired_ds__extract_month + , subq_2.customer_id__acquired_ds__extract_day + , subq_2.customer_id__acquired_ds__extract_dow + , subq_2.customer_id__acquired_ds__extract_doy + , subq_2.customer_third_hop_id__acquired_ds__day + , subq_2.customer_third_hop_id__acquired_ds__week + , subq_2.customer_third_hop_id__acquired_ds__month + , subq_2.customer_third_hop_id__acquired_ds__quarter + , subq_2.customer_third_hop_id__acquired_ds__year + , subq_2.customer_third_hop_id__acquired_ds__extract_year + , subq_2.customer_third_hop_id__acquired_ds__extract_quarter + , subq_2.customer_third_hop_id__acquired_ds__extract_month + , subq_2.customer_third_hop_id__acquired_ds__extract_day + , subq_2.customer_third_hop_id__acquired_ds__extract_dow + , subq_2.customer_third_hop_id__acquired_ds__extract_doy + , subq_2.acquired_ds__day AS metric_time__day + , subq_2.acquired_ds__week AS metric_time__week + , subq_2.acquired_ds__month AS metric_time__month + , subq_2.acquired_ds__quarter AS metric_time__quarter + , subq_2.acquired_ds__year AS metric_time__year + , subq_2.acquired_ds__extract_year AS metric_time__extract_year + , subq_2.acquired_ds__extract_quarter AS metric_time__extract_quarter + , subq_2.acquired_ds__extract_month AS metric_time__extract_month + , subq_2.acquired_ds__extract_day AS metric_time__extract_day + , subq_2.acquired_ds__extract_dow AS metric_time__extract_dow + , subq_2.acquired_ds__extract_doy AS metric_time__extract_doy + , subq_2.customer_id + , subq_2.customer_third_hop_id + , subq_2.customer_id__customer_third_hop_id + , subq_2.customer_third_hop_id__customer_id + , subq_2.country + , subq_2.customer_id__country + , subq_2.customer_third_hop_id__country + , subq_2.customers_with_other_data + FROM ( + -- Read Elements From Semantic Model 'customer_other_data' + SELECT + 1 AS customers_with_other_data + , customer_other_data_src_22000.country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy + , customer_other_data_src_22000.country AS customer_id__country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy + , customer_other_data_src_22000.country AS customer_third_hop_id__country + , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day + , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week + , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month + , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter + , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year + , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year + , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter + , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month + , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day + , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow + , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy + , customer_other_data_src_22000.customer_id + , customer_other_data_src_22000.customer_third_hop_id + , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id + , customer_other_data_src_22000.customer_id AS customer_third_hop_id__customer_id + FROM ***************************.customer_other_data customer_other_data_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + WHERE customer_id__country = 'paraguay' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + GROUP BY + subq_5.customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + subq_1.customer_third_hop_id = subq_8.customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql new file mode 100644 index 0000000000..bb84ce2f94 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_inner_query_single_hop +test_filename: test_metric_filter_rendering.py +docstring: + Tests rendering for a metric filter using a one-hop join in the inner query. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['third_hop_count',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + COUNT(DISTINCT third_hop_count) AS third_hop_count +FROM ( + -- Join Standard Outputs + SELECT + subq_21.customer_id__customer_third_hop_id__paraguayan_customers AS customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers + , third_hop_table_src_22000.customer_third_hop_id AS third_hop_count + FROM ***************************.third_hop_table third_hop_table_src_22000 + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['customers_with_other_data', 'customer_id__customer_third_hop_id'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['customer_id__customer_third_hop_id', 'customer_id__customer_third_hop_id__paraguayan_customers'] + SELECT + customer_id__customer_third_hop_id + , SUM(customers_with_other_data) AS customer_id__customer_third_hop_id__paraguayan_customers + FROM ( + -- Read Elements From Semantic Model 'customer_other_data' + -- Metric Time Dimension 'acquired_ds' + SELECT + customer_third_hop_id AS customer_id__customer_third_hop_id + , country AS customer_id__country + , 1 AS customers_with_other_data + FROM ***************************.customer_other_data customer_other_data_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE customer_id__country = 'paraguay' + GROUP BY + customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + third_hop_table_src_22000.customer_third_hop_id = subq_21.customer_id__customer_third_hop_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql new file mode 100644 index 0000000000..7f2748be34 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql @@ -0,0 +1,658 @@ +test_name: test_metric_filtered_by_itself +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query for a metric that filters by the same metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.bookers +FROM ( + -- Aggregate Measures + SELECT + COUNT(DISTINCT subq_10.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers',] + SELECT + subq_9.bookers + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_partitioned__day + , subq_8.ds_partitioned__week + , subq_8.ds_partitioned__month + , subq_8.ds_partitioned__quarter + , subq_8.ds_partitioned__year + , subq_8.ds_partitioned__extract_year + , subq_8.ds_partitioned__extract_quarter + , subq_8.ds_partitioned__extract_month + , subq_8.ds_partitioned__extract_day + , subq_8.ds_partitioned__extract_dow + , subq_8.ds_partitioned__extract_doy + , subq_8.paid_at__day + , subq_8.paid_at__week + , subq_8.paid_at__month + , subq_8.paid_at__quarter + , subq_8.paid_at__year + , subq_8.paid_at__extract_year + , subq_8.paid_at__extract_quarter + , subq_8.paid_at__extract_month + , subq_8.paid_at__extract_day + , subq_8.paid_at__extract_dow + , subq_8.paid_at__extract_doy + , subq_8.booking__ds__day + , subq_8.booking__ds__week + , subq_8.booking__ds__month + , subq_8.booking__ds__quarter + , subq_8.booking__ds__year + , subq_8.booking__ds__extract_year + , subq_8.booking__ds__extract_quarter + , subq_8.booking__ds__extract_month + , subq_8.booking__ds__extract_day + , subq_8.booking__ds__extract_dow + , subq_8.booking__ds__extract_doy + , subq_8.booking__ds_partitioned__day + , subq_8.booking__ds_partitioned__week + , subq_8.booking__ds_partitioned__month + , subq_8.booking__ds_partitioned__quarter + , subq_8.booking__ds_partitioned__year + , subq_8.booking__ds_partitioned__extract_year + , subq_8.booking__ds_partitioned__extract_quarter + , subq_8.booking__ds_partitioned__extract_month + , subq_8.booking__ds_partitioned__extract_day + , subq_8.booking__ds_partitioned__extract_dow + , subq_8.booking__ds_partitioned__extract_doy + , subq_8.booking__paid_at__day + , subq_8.booking__paid_at__week + , subq_8.booking__paid_at__month + , subq_8.booking__paid_at__quarter + , subq_8.booking__paid_at__year + , subq_8.booking__paid_at__extract_year + , subq_8.booking__paid_at__extract_quarter + , subq_8.booking__paid_at__extract_month + , subq_8.booking__paid_at__extract_day + , subq_8.booking__paid_at__extract_dow + , subq_8.booking__paid_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.guest + , subq_8.host + , subq_8.booking__listing + , subq_8.booking__guest + , subq_8.booking__host + , subq_8.is_instant + , subq_8.booking__is_instant + , subq_8.listing__bookers + , subq_8.bookings + , subq_8.instant_bookings + , subq_8.booking_value + , subq_8.max_booking_value + , subq_8.min_booking_value + , subq_8.bookers + , subq_8.average_booking_value + , subq_8.referred_bookings + , subq_8.median_booking_value + , subq_8.booking_value_p99 + , subq_8.discrete_booking_value_p99 + , subq_8.approximate_continuous_booking_value_p99 + , subq_8.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_7.listing__bookers AS listing__bookers + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookers'] + SELECT + subq_6.listing + , subq_6.listing__bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.bookers AS listing__bookers + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , COUNT(DISTINCT subq_4.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'listing'] + SELECT + subq_3.listing + , subq_3.bookers + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.listing = subq_7.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE listing__bookers > 1.00 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql new file mode 100644 index 0000000000..ac66d79437 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql @@ -0,0 +1,56 @@ +test_name: test_metric_filtered_by_itself +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query for a metric that filters by the same metric. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookers',] +-- Aggregate Measures +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COUNT(DISTINCT bookers) AS bookers +FROM ( + -- Join Standard Outputs + SELECT + subq_18.listing__bookers AS listing__bookers + , subq_13.bookers AS bookers + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + listing + , bookers + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookers', 'listing'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookers'] + SELECT + listing + , COUNT(DISTINCT bookers) AS listing__bookers + FROM sma_28009_cte sma_28009_cte + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + ON + subq_13.listing = subq_18.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +WHERE listing__bookers > 1.00 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql new file mode 100644 index 0000000000..f971d395d4 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql @@ -0,0 +1,538 @@ +test_name: test_metric_with_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a metric in the metric-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day + , subq_11.listings AS active_listings +FROM ( + -- Aggregate Measures + SELECT + subq_10.metric_time__day + , SUM(subq_10.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + subq_9.metric_time__day + , subq_9.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.created_at__day + , subq_8.created_at__week + , subq_8.created_at__month + , subq_8.created_at__quarter + , subq_8.created_at__year + , subq_8.created_at__extract_year + , subq_8.created_at__extract_quarter + , subq_8.created_at__extract_month + , subq_8.created_at__extract_day + , subq_8.created_at__extract_dow + , subq_8.created_at__extract_doy + , subq_8.listing__ds__day + , subq_8.listing__ds__week + , subq_8.listing__ds__month + , subq_8.listing__ds__quarter + , subq_8.listing__ds__year + , subq_8.listing__ds__extract_year + , subq_8.listing__ds__extract_quarter + , subq_8.listing__ds__extract_month + , subq_8.listing__ds__extract_day + , subq_8.listing__ds__extract_dow + , subq_8.listing__ds__extract_doy + , subq_8.listing__created_at__day + , subq_8.listing__created_at__week + , subq_8.listing__created_at__month + , subq_8.listing__created_at__quarter + , subq_8.listing__created_at__year + , subq_8.listing__created_at__extract_year + , subq_8.listing__created_at__extract_quarter + , subq_8.listing__created_at__extract_month + , subq_8.listing__created_at__extract_day + , subq_8.listing__created_at__extract_dow + , subq_8.listing__created_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.user + , subq_8.listing__user + , subq_8.country_latest + , subq_8.is_lux_latest + , subq_8.capacity_latest + , subq_8.listing__country_latest + , subq_8.listing__is_lux_latest + , subq_8.listing__capacity_latest + , subq_8.listing__bookings + , subq_8.listings + , subq_8.largest_listing + , subq_8.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_7.listing__bookings AS listing__bookings + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + subq_6.listing + , subq_6.listing__bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.bookings AS listing__bookings + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_3.listing + , subq_3.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.listing = subq_7.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE listing__bookings > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql new file mode 100644 index 0000000000..6f2464aa43 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql @@ -0,0 +1,59 @@ +test_name: test_metric_with_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a metric in the metric-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , SUM(listings) AS active_listings +FROM ( + -- Join Standard Outputs + SELECT + subq_19.listing__bookings AS listing__bookings + , subq_13.metric_time__day AS metric_time__day + , subq_13.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , listing_id AS listing + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + LEFT OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + listing + , SUM(bookings) AS listing__bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + ON + subq_13.listing = subq_19.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +WHERE listing__bookings > 2 +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql new file mode 100644 index 0000000000..88a39d97b4 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql @@ -0,0 +1,410 @@ +test_name: test_query_with_cumulative_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a cumulative metric in the query-level where filter. + + Note this cumulative metric has no window / grain to date. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_10.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_9.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.created_at__day + , subq_8.created_at__week + , subq_8.created_at__month + , subq_8.created_at__quarter + , subq_8.created_at__year + , subq_8.created_at__extract_year + , subq_8.created_at__extract_quarter + , subq_8.created_at__extract_month + , subq_8.created_at__extract_day + , subq_8.created_at__extract_dow + , subq_8.created_at__extract_doy + , subq_8.listing__ds__day + , subq_8.listing__ds__week + , subq_8.listing__ds__month + , subq_8.listing__ds__quarter + , subq_8.listing__ds__year + , subq_8.listing__ds__extract_year + , subq_8.listing__ds__extract_quarter + , subq_8.listing__ds__extract_month + , subq_8.listing__ds__extract_day + , subq_8.listing__ds__extract_dow + , subq_8.listing__ds__extract_doy + , subq_8.listing__created_at__day + , subq_8.listing__created_at__week + , subq_8.listing__created_at__month + , subq_8.listing__created_at__quarter + , subq_8.listing__created_at__year + , subq_8.listing__created_at__extract_year + , subq_8.listing__created_at__extract_quarter + , subq_8.listing__created_at__extract_month + , subq_8.listing__created_at__extract_day + , subq_8.listing__created_at__extract_dow + , subq_8.listing__created_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.user + , subq_8.listing__user + , subq_8.country_latest + , subq_8.is_lux_latest + , subq_8.capacity_latest + , subq_8.listing__country_latest + , subq_8.listing__is_lux_latest + , subq_8.listing__capacity_latest + , subq_8.user__revenue_all_time + , subq_8.listings + , subq_8.largest_listing + , subq_8.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_7.user__revenue_all_time AS user__revenue_all_time + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['user', 'user__revenue_all_time'] + SELECT + subq_6.user + , subq_6.user__revenue_all_time + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.user + , subq_5.txn_revenue AS user__revenue_all_time + FROM ( + -- Aggregate Measures + SELECT + subq_4.user + , SUM(subq_4.txn_revenue) AS txn_revenue + FROM ( + -- Pass Only Elements: ['txn_revenue', 'user'] + SELECT + subq_3.user + , subq_3.txn_revenue + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.revenue_instance__ds__day + , subq_2.revenue_instance__ds__week + , subq_2.revenue_instance__ds__month + , subq_2.revenue_instance__ds__quarter + , subq_2.revenue_instance__ds__year + , subq_2.revenue_instance__ds__extract_year + , subq_2.revenue_instance__ds__extract_quarter + , subq_2.revenue_instance__ds__extract_month + , subq_2.revenue_instance__ds__extract_day + , subq_2.revenue_instance__ds__extract_dow + , subq_2.revenue_instance__ds__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.user + , subq_2.revenue_instance__user + , subq_2.txn_revenue + FROM ( + -- Read Elements From Semantic Model 'revenue' + SELECT + revenue_src_28000.revenue AS txn_revenue + , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , revenue_src_28000.user_id AS user + , revenue_src_28000.user_id AS revenue_instance__user + FROM ***************************.fct_revenue revenue_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.user = subq_7.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE user__revenue_all_time > 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql new file mode 100644 index 0000000000..c85edbbf7f --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql @@ -0,0 +1,50 @@ +test_name: test_query_with_cumulative_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a cumulative metric in the query-level where filter. + + Note this cumulative metric has no window / grain to date. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + subq_19.user__revenue_all_time AS user__revenue_all_time + , subq_13.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + user_id AS user + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + LEFT OUTER JOIN + ( + -- Read Elements From Semantic Model 'revenue' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['txn_revenue', 'user'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['user', 'user__revenue_all_time'] + SELECT + user_id AS user + , SUM(revenue) AS user__revenue_all_time + FROM ***************************.fct_revenue revenue_src_28000 + GROUP BY + user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + ON + subq_13.user = subq_19.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +WHERE user__revenue_all_time > 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql new file mode 100644 index 0000000000..eb936aab7e --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql @@ -0,0 +1,696 @@ +test_name: test_query_with_derived_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a derived metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_17.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_16.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.created_at__day + , subq_15.created_at__week + , subq_15.created_at__month + , subq_15.created_at__quarter + , subq_15.created_at__year + , subq_15.created_at__extract_year + , subq_15.created_at__extract_quarter + , subq_15.created_at__extract_month + , subq_15.created_at__extract_day + , subq_15.created_at__extract_dow + , subq_15.created_at__extract_doy + , subq_15.listing__ds__day + , subq_15.listing__ds__week + , subq_15.listing__ds__month + , subq_15.listing__ds__quarter + , subq_15.listing__ds__year + , subq_15.listing__ds__extract_year + , subq_15.listing__ds__extract_quarter + , subq_15.listing__ds__extract_month + , subq_15.listing__ds__extract_day + , subq_15.listing__ds__extract_dow + , subq_15.listing__ds__extract_doy + , subq_15.listing__created_at__day + , subq_15.listing__created_at__week + , subq_15.listing__created_at__month + , subq_15.listing__created_at__quarter + , subq_15.listing__created_at__year + , subq_15.listing__created_at__extract_year + , subq_15.listing__created_at__extract_quarter + , subq_15.listing__created_at__extract_month + , subq_15.listing__created_at__extract_day + , subq_15.listing__created_at__extract_dow + , subq_15.listing__created_at__extract_doy + , subq_15.metric_time__day + , subq_15.metric_time__week + , subq_15.metric_time__month + , subq_15.metric_time__quarter + , subq_15.metric_time__year + , subq_15.metric_time__extract_year + , subq_15.metric_time__extract_quarter + , subq_15.metric_time__extract_month + , subq_15.metric_time__extract_day + , subq_15.metric_time__extract_dow + , subq_15.metric_time__extract_doy + , subq_15.listing + , subq_15.user + , subq_15.listing__user + , subq_15.country_latest + , subq_15.is_lux_latest + , subq_15.capacity_latest + , subq_15.listing__country_latest + , subq_15.listing__is_lux_latest + , subq_15.listing__capacity_latest + , subq_15.listing__views_times_booking_value + , subq_15.listings + , subq_15.largest_listing + , subq_15.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_14.listing__views_times_booking_value AS listing__views_times_booking_value + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__views_times_booking_value'] + SELECT + subq_13.listing + , subq_13.listing__views_times_booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_12.listing + , booking_value * views AS listing__views_times_booking_value + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_6.listing, subq_11.listing) AS listing + , MAX(subq_6.booking_value) AS booking_value + , MAX(subq_11.views) AS views + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , SUM(subq_4.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'listing'] + SELECT + subq_3.listing + , subq_3.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_10.listing + , subq_10.views + FROM ( + -- Aggregate Measures + SELECT + subq_9.listing + , SUM(subq_9.views) AS views + FROM ( + -- Pass Only Elements: ['views', 'listing'] + SELECT + subq_8.listing + , subq_8.views + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_partitioned__day + , subq_7.ds_partitioned__week + , subq_7.ds_partitioned__month + , subq_7.ds_partitioned__quarter + , subq_7.ds_partitioned__year + , subq_7.ds_partitioned__extract_year + , subq_7.ds_partitioned__extract_quarter + , subq_7.ds_partitioned__extract_month + , subq_7.ds_partitioned__extract_day + , subq_7.ds_partitioned__extract_dow + , subq_7.ds_partitioned__extract_doy + , subq_7.view__ds__day + , subq_7.view__ds__week + , subq_7.view__ds__month + , subq_7.view__ds__quarter + , subq_7.view__ds__year + , subq_7.view__ds__extract_year + , subq_7.view__ds__extract_quarter + , subq_7.view__ds__extract_month + , subq_7.view__ds__extract_day + , subq_7.view__ds__extract_dow + , subq_7.view__ds__extract_doy + , subq_7.view__ds_partitioned__day + , subq_7.view__ds_partitioned__week + , subq_7.view__ds_partitioned__month + , subq_7.view__ds_partitioned__quarter + , subq_7.view__ds_partitioned__year + , subq_7.view__ds_partitioned__extract_year + , subq_7.view__ds_partitioned__extract_quarter + , subq_7.view__ds_partitioned__extract_month + , subq_7.view__ds_partitioned__extract_day + , subq_7.view__ds_partitioned__extract_dow + , subq_7.view__ds_partitioned__extract_doy + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.listing + , subq_7.user + , subq_7.view__listing + , subq_7.view__user + , subq_7.views + FROM ( + -- Read Elements From Semantic Model 'views_source' + SELECT + 1 AS views + , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , views_source_src_28000.listing_id AS listing + , views_source_src_28000.user_id AS user + , views_source_src_28000.listing_id AS view__listing + , views_source_src_28000.user_id AS view__user + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_6.listing = subq_11.listing + GROUP BY + COALESCE(subq_6.listing, subq_11.listing) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + subq_1.listing = subq_14.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE listing__views_times_booking_value > 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql new file mode 100644 index 0000000000..502489e762 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql @@ -0,0 +1,88 @@ +test_name: test_query_with_derived_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a derived metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + subq_33.listing__views_times_booking_value AS listing__views_times_booking_value + , subq_20.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + LEFT OUTER JOIN + ( + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__views_times_booking_value'] + SELECT + listing + , booking_value * views AS listing__views_times_booking_value + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_25.listing, subq_30.listing) AS listing + , MAX(subq_25.booking_value) AS booking_value + , MAX(subq_30.views) AS views + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['booking_value', 'listing'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + listing_id AS listing + , SUM(booking_value) AS booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + FULL OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + listing + , SUM(views) AS views + FROM ( + -- Read Elements From Semantic Model 'views_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['views', 'listing'] + SELECT + listing_id AS listing + , 1 AS views + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + ON + subq_25.listing = subq_30.listing + GROUP BY + COALESCE(subq_25.listing, subq_30.listing) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_33 + ON + subq_20.listing = subq_33.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_34 +WHERE listing__views_times_booking_value > 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql new file mode 100644 index 0000000000..bababe949f --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql @@ -0,0 +1,765 @@ +test_name: test_query_with_multiple_metrics_in_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with 2 simple metrics in the query-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_17.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_16.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_15.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_14.ds__day + , subq_14.ds__week + , subq_14.ds__month + , subq_14.ds__quarter + , subq_14.ds__year + , subq_14.ds__extract_year + , subq_14.ds__extract_quarter + , subq_14.ds__extract_month + , subq_14.ds__extract_day + , subq_14.ds__extract_dow + , subq_14.ds__extract_doy + , subq_14.created_at__day + , subq_14.created_at__week + , subq_14.created_at__month + , subq_14.created_at__quarter + , subq_14.created_at__year + , subq_14.created_at__extract_year + , subq_14.created_at__extract_quarter + , subq_14.created_at__extract_month + , subq_14.created_at__extract_day + , subq_14.created_at__extract_dow + , subq_14.created_at__extract_doy + , subq_14.listing__ds__day + , subq_14.listing__ds__week + , subq_14.listing__ds__month + , subq_14.listing__ds__quarter + , subq_14.listing__ds__year + , subq_14.listing__ds__extract_year + , subq_14.listing__ds__extract_quarter + , subq_14.listing__ds__extract_month + , subq_14.listing__ds__extract_day + , subq_14.listing__ds__extract_dow + , subq_14.listing__ds__extract_doy + , subq_14.listing__created_at__day + , subq_14.listing__created_at__week + , subq_14.listing__created_at__month + , subq_14.listing__created_at__quarter + , subq_14.listing__created_at__year + , subq_14.listing__created_at__extract_year + , subq_14.listing__created_at__extract_quarter + , subq_14.listing__created_at__extract_month + , subq_14.listing__created_at__extract_day + , subq_14.listing__created_at__extract_dow + , subq_14.listing__created_at__extract_doy + , subq_14.metric_time__day + , subq_14.metric_time__week + , subq_14.metric_time__month + , subq_14.metric_time__quarter + , subq_14.metric_time__year + , subq_14.metric_time__extract_year + , subq_14.metric_time__extract_quarter + , subq_14.metric_time__extract_month + , subq_14.metric_time__extract_day + , subq_14.metric_time__extract_dow + , subq_14.metric_time__extract_doy + , subq_14.listing + , subq_14.user + , subq_14.listing__user + , subq_14.country_latest + , subq_14.is_lux_latest + , subq_14.capacity_latest + , subq_14.listing__country_latest + , subq_14.listing__is_lux_latest + , subq_14.listing__capacity_latest + , subq_14.listing__bookings + , subq_14.listing__bookers + , subq_14.listings + , subq_14.largest_listing + , subq_14.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_7.listing__bookings AS listing__bookings + , subq_13.listing__bookers AS listing__bookers + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + subq_6.listing + , subq_6.listing__bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.bookings AS listing__bookings + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_3.listing + , subq_3.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.listing = subq_7.listing + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookers'] + SELECT + subq_12.listing + , subq_12.listing__bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_11.listing + , subq_11.bookers AS listing__bookers + FROM ( + -- Aggregate Measures + SELECT + subq_10.listing + , COUNT(DISTINCT subq_10.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'listing'] + SELECT + subq_9.listing + , subq_9.bookers + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_partitioned__day + , subq_8.ds_partitioned__week + , subq_8.ds_partitioned__month + , subq_8.ds_partitioned__quarter + , subq_8.ds_partitioned__year + , subq_8.ds_partitioned__extract_year + , subq_8.ds_partitioned__extract_quarter + , subq_8.ds_partitioned__extract_month + , subq_8.ds_partitioned__extract_day + , subq_8.ds_partitioned__extract_dow + , subq_8.ds_partitioned__extract_doy + , subq_8.paid_at__day + , subq_8.paid_at__week + , subq_8.paid_at__month + , subq_8.paid_at__quarter + , subq_8.paid_at__year + , subq_8.paid_at__extract_year + , subq_8.paid_at__extract_quarter + , subq_8.paid_at__extract_month + , subq_8.paid_at__extract_day + , subq_8.paid_at__extract_dow + , subq_8.paid_at__extract_doy + , subq_8.booking__ds__day + , subq_8.booking__ds__week + , subq_8.booking__ds__month + , subq_8.booking__ds__quarter + , subq_8.booking__ds__year + , subq_8.booking__ds__extract_year + , subq_8.booking__ds__extract_quarter + , subq_8.booking__ds__extract_month + , subq_8.booking__ds__extract_day + , subq_8.booking__ds__extract_dow + , subq_8.booking__ds__extract_doy + , subq_8.booking__ds_partitioned__day + , subq_8.booking__ds_partitioned__week + , subq_8.booking__ds_partitioned__month + , subq_8.booking__ds_partitioned__quarter + , subq_8.booking__ds_partitioned__year + , subq_8.booking__ds_partitioned__extract_year + , subq_8.booking__ds_partitioned__extract_quarter + , subq_8.booking__ds_partitioned__extract_month + , subq_8.booking__ds_partitioned__extract_day + , subq_8.booking__ds_partitioned__extract_dow + , subq_8.booking__ds_partitioned__extract_doy + , subq_8.booking__paid_at__day + , subq_8.booking__paid_at__week + , subq_8.booking__paid_at__month + , subq_8.booking__paid_at__quarter + , subq_8.booking__paid_at__year + , subq_8.booking__paid_at__extract_year + , subq_8.booking__paid_at__extract_quarter + , subq_8.booking__paid_at__extract_month + , subq_8.booking__paid_at__extract_day + , subq_8.booking__paid_at__extract_dow + , subq_8.booking__paid_at__extract_doy + , subq_8.ds__day AS metric_time__day + , subq_8.ds__week AS metric_time__week + , subq_8.ds__month AS metric_time__month + , subq_8.ds__quarter AS metric_time__quarter + , subq_8.ds__year AS metric_time__year + , subq_8.ds__extract_year AS metric_time__extract_year + , subq_8.ds__extract_quarter AS metric_time__extract_quarter + , subq_8.ds__extract_month AS metric_time__extract_month + , subq_8.ds__extract_day AS metric_time__extract_day + , subq_8.ds__extract_dow AS metric_time__extract_dow + , subq_8.ds__extract_doy AS metric_time__extract_doy + , subq_8.listing + , subq_8.guest + , subq_8.host + , subq_8.booking__listing + , subq_8.booking__guest + , subq_8.booking__host + , subq_8.is_instant + , subq_8.booking__is_instant + , subq_8.bookings + , subq_8.instant_bookings + , subq_8.booking_value + , subq_8.max_booking_value + , subq_8.min_booking_value + , subq_8.bookers + , subq_8.average_booking_value + , subq_8.referred_bookings + , subq_8.median_booking_value + , subq_8.booking_value_p99 + , subq_8.discrete_booking_value_p99 + , subq_8.approximate_continuous_booking_value_p99 + , subq_8.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + subq_1.listing = subq_13.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + WHERE listing__bookings > 2 AND listing__bookers > 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql new file mode 100644 index 0000000000..2ecaa53c47 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql @@ -0,0 +1,76 @@ +test_name: test_query_with_multiple_metrics_in_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with 2 simple metrics in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS bookings + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + subq_25.listing__bookings AS listing__bookings + , subq_30.listing__bookers AS listing__bookers + , subq_19.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookings', 'listing'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + listing + , SUM(bookings) AS listing__bookings + FROM sma_28009_cte sma_28009_cte + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + ON + subq_19.listing = subq_25.listing + LEFT OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['bookers', 'listing'] + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookers'] + SELECT + listing + , COUNT(DISTINCT bookers) AS listing__bookers + FROM sma_28009_cte sma_28009_cte + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + ON + subq_19.listing = subq_30.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_31 +WHERE listing__bookings > 2 AND listing__bookers > 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql new file mode 100644 index 0000000000..df585b2e9d --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql @@ -0,0 +1,773 @@ +test_name: test_query_with_ratio_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a ratio metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_18.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_17.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_16.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.created_at__day + , subq_15.created_at__week + , subq_15.created_at__month + , subq_15.created_at__quarter + , subq_15.created_at__year + , subq_15.created_at__extract_year + , subq_15.created_at__extract_quarter + , subq_15.created_at__extract_month + , subq_15.created_at__extract_day + , subq_15.created_at__extract_dow + , subq_15.created_at__extract_doy + , subq_15.listing__ds__day + , subq_15.listing__ds__week + , subq_15.listing__ds__month + , subq_15.listing__ds__quarter + , subq_15.listing__ds__year + , subq_15.listing__ds__extract_year + , subq_15.listing__ds__extract_quarter + , subq_15.listing__ds__extract_month + , subq_15.listing__ds__extract_day + , subq_15.listing__ds__extract_dow + , subq_15.listing__ds__extract_doy + , subq_15.listing__created_at__day + , subq_15.listing__created_at__week + , subq_15.listing__created_at__month + , subq_15.listing__created_at__quarter + , subq_15.listing__created_at__year + , subq_15.listing__created_at__extract_year + , subq_15.listing__created_at__extract_quarter + , subq_15.listing__created_at__extract_month + , subq_15.listing__created_at__extract_day + , subq_15.listing__created_at__extract_dow + , subq_15.listing__created_at__extract_doy + , subq_15.metric_time__day + , subq_15.metric_time__week + , subq_15.metric_time__month + , subq_15.metric_time__quarter + , subq_15.metric_time__year + , subq_15.metric_time__extract_year + , subq_15.metric_time__extract_quarter + , subq_15.metric_time__extract_month + , subq_15.metric_time__extract_day + , subq_15.metric_time__extract_dow + , subq_15.metric_time__extract_doy + , subq_15.listing + , subq_15.user + , subq_15.listing__user + , subq_15.country_latest + , subq_15.is_lux_latest + , subq_15.capacity_latest + , subq_15.listing__country_latest + , subq_15.listing__is_lux_latest + , subq_15.listing__capacity_latest + , subq_15.listing__bookings_per_booker + , subq_15.listings + , subq_15.largest_listing + , subq_15.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_14.listing__bookings_per_booker AS listing__bookings_per_booker + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookings_per_booker'] + SELECT + subq_13.listing + , subq_13.listing__bookings_per_booker + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_12.listing + , CAST(subq_12.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_12.bookers, 0) AS DOUBLE PRECISION) AS listing__bookings_per_booker + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_6.listing, subq_11.listing) AS listing + , MAX(subq_6.bookings) AS bookings + , MAX(subq_11.bookers) AS bookers + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_3.listing + , subq_3.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_10.listing + , subq_10.bookers + FROM ( + -- Aggregate Measures + SELECT + subq_9.listing + , COUNT(DISTINCT subq_9.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'listing'] + SELECT + subq_8.listing + , subq_8.bookers + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.ds_partitioned__day + , subq_7.ds_partitioned__week + , subq_7.ds_partitioned__month + , subq_7.ds_partitioned__quarter + , subq_7.ds_partitioned__year + , subq_7.ds_partitioned__extract_year + , subq_7.ds_partitioned__extract_quarter + , subq_7.ds_partitioned__extract_month + , subq_7.ds_partitioned__extract_day + , subq_7.ds_partitioned__extract_dow + , subq_7.ds_partitioned__extract_doy + , subq_7.paid_at__day + , subq_7.paid_at__week + , subq_7.paid_at__month + , subq_7.paid_at__quarter + , subq_7.paid_at__year + , subq_7.paid_at__extract_year + , subq_7.paid_at__extract_quarter + , subq_7.paid_at__extract_month + , subq_7.paid_at__extract_day + , subq_7.paid_at__extract_dow + , subq_7.paid_at__extract_doy + , subq_7.booking__ds__day + , subq_7.booking__ds__week + , subq_7.booking__ds__month + , subq_7.booking__ds__quarter + , subq_7.booking__ds__year + , subq_7.booking__ds__extract_year + , subq_7.booking__ds__extract_quarter + , subq_7.booking__ds__extract_month + , subq_7.booking__ds__extract_day + , subq_7.booking__ds__extract_dow + , subq_7.booking__ds__extract_doy + , subq_7.booking__ds_partitioned__day + , subq_7.booking__ds_partitioned__week + , subq_7.booking__ds_partitioned__month + , subq_7.booking__ds_partitioned__quarter + , subq_7.booking__ds_partitioned__year + , subq_7.booking__ds_partitioned__extract_year + , subq_7.booking__ds_partitioned__extract_quarter + , subq_7.booking__ds_partitioned__extract_month + , subq_7.booking__ds_partitioned__extract_day + , subq_7.booking__ds_partitioned__extract_dow + , subq_7.booking__ds_partitioned__extract_doy + , subq_7.booking__paid_at__day + , subq_7.booking__paid_at__week + , subq_7.booking__paid_at__month + , subq_7.booking__paid_at__quarter + , subq_7.booking__paid_at__year + , subq_7.booking__paid_at__extract_year + , subq_7.booking__paid_at__extract_quarter + , subq_7.booking__paid_at__extract_month + , subq_7.booking__paid_at__extract_day + , subq_7.booking__paid_at__extract_dow + , subq_7.booking__paid_at__extract_doy + , subq_7.ds__day AS metric_time__day + , subq_7.ds__week AS metric_time__week + , subq_7.ds__month AS metric_time__month + , subq_7.ds__quarter AS metric_time__quarter + , subq_7.ds__year AS metric_time__year + , subq_7.ds__extract_year AS metric_time__extract_year + , subq_7.ds__extract_quarter AS metric_time__extract_quarter + , subq_7.ds__extract_month AS metric_time__extract_month + , subq_7.ds__extract_day AS metric_time__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow + , subq_7.ds__extract_doy AS metric_time__extract_doy + , subq_7.listing + , subq_7.guest + , subq_7.host + , subq_7.booking__listing + , subq_7.booking__guest + , subq_7.booking__host + , subq_7.is_instant + , subq_7.booking__is_instant + , subq_7.bookings + , subq_7.instant_bookings + , subq_7.booking_value + , subq_7.max_booking_value + , subq_7.min_booking_value + , subq_7.bookers + , subq_7.average_booking_value + , subq_7.referred_bookings + , subq_7.median_booking_value + , subq_7.booking_value_p99 + , subq_7.discrete_booking_value_p99 + , subq_7.approximate_continuous_booking_value_p99 + , subq_7.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + GROUP BY + subq_9.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_6.listing = subq_11.listing + GROUP BY + COALESCE(subq_6.listing, subq_11.listing) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + subq_1.listing = subq_14.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE listing__bookings_per_booker > 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql new file mode 100644 index 0000000000..80cfb49fee --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql @@ -0,0 +1,55 @@ +test_name: test_query_with_ratio_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a ratio metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + CAST(subq_25.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_25.bookers, 0) AS DOUBLE PRECISION) AS listing__bookings_per_booker + , subq_20.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + LEFT OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + listing + , SUM(bookings) AS bookings + , COUNT(DISTINCT bookers) AS bookers + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'bookers', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + , guest_id AS bookers + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + ON + subq_20.listing = subq_25.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_28 +WHERE listing__bookings_per_booker > 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql new file mode 100644 index 0000000000..ab8afd1121 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql @@ -0,0 +1,533 @@ +test_name: test_query_with_simple_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a simple metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.listings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_10.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_9.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.created_at__day + , subq_8.created_at__week + , subq_8.created_at__month + , subq_8.created_at__quarter + , subq_8.created_at__year + , subq_8.created_at__extract_year + , subq_8.created_at__extract_quarter + , subq_8.created_at__extract_month + , subq_8.created_at__extract_day + , subq_8.created_at__extract_dow + , subq_8.created_at__extract_doy + , subq_8.listing__ds__day + , subq_8.listing__ds__week + , subq_8.listing__ds__month + , subq_8.listing__ds__quarter + , subq_8.listing__ds__year + , subq_8.listing__ds__extract_year + , subq_8.listing__ds__extract_quarter + , subq_8.listing__ds__extract_month + , subq_8.listing__ds__extract_day + , subq_8.listing__ds__extract_dow + , subq_8.listing__ds__extract_doy + , subq_8.listing__created_at__day + , subq_8.listing__created_at__week + , subq_8.listing__created_at__month + , subq_8.listing__created_at__quarter + , subq_8.listing__created_at__year + , subq_8.listing__created_at__extract_year + , subq_8.listing__created_at__extract_quarter + , subq_8.listing__created_at__extract_month + , subq_8.listing__created_at__extract_day + , subq_8.listing__created_at__extract_dow + , subq_8.listing__created_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.user + , subq_8.listing__user + , subq_8.country_latest + , subq_8.is_lux_latest + , subq_8.capacity_latest + , subq_8.listing__country_latest + , subq_8.listing__is_lux_latest + , subq_8.listing__capacity_latest + , subq_8.listing__bookings + , subq_8.listings + , subq_8.largest_listing + , subq_8.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_7.listing__bookings AS listing__bookings + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + subq_6.listing + , subq_6.listing__bookings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_5.listing + , subq_5.bookings AS listing__bookings + FROM ( + -- Aggregate Measures + SELECT + subq_4.listing + , SUM(subq_4.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + subq_3.listing + , subq_3.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.paid_at__day + , subq_2.paid_at__week + , subq_2.paid_at__month + , subq_2.paid_at__quarter + , subq_2.paid_at__year + , subq_2.paid_at__extract_year + , subq_2.paid_at__extract_quarter + , subq_2.paid_at__extract_month + , subq_2.paid_at__extract_day + , subq_2.paid_at__extract_dow + , subq_2.paid_at__extract_doy + , subq_2.booking__ds__day + , subq_2.booking__ds__week + , subq_2.booking__ds__month + , subq_2.booking__ds__quarter + , subq_2.booking__ds__year + , subq_2.booking__ds__extract_year + , subq_2.booking__ds__extract_quarter + , subq_2.booking__ds__extract_month + , subq_2.booking__ds__extract_day + , subq_2.booking__ds__extract_dow + , subq_2.booking__ds__extract_doy + , subq_2.booking__ds_partitioned__day + , subq_2.booking__ds_partitioned__week + , subq_2.booking__ds_partitioned__month + , subq_2.booking__ds_partitioned__quarter + , subq_2.booking__ds_partitioned__year + , subq_2.booking__ds_partitioned__extract_year + , subq_2.booking__ds_partitioned__extract_quarter + , subq_2.booking__ds_partitioned__extract_month + , subq_2.booking__ds_partitioned__extract_day + , subq_2.booking__ds_partitioned__extract_dow + , subq_2.booking__ds_partitioned__extract_doy + , subq_2.booking__paid_at__day + , subq_2.booking__paid_at__week + , subq_2.booking__paid_at__month + , subq_2.booking__paid_at__quarter + , subq_2.booking__paid_at__year + , subq_2.booking__paid_at__extract_year + , subq_2.booking__paid_at__extract_quarter + , subq_2.booking__paid_at__extract_month + , subq_2.booking__paid_at__extract_day + , subq_2.booking__paid_at__extract_dow + , subq_2.booking__paid_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.guest + , subq_2.host + , subq_2.booking__listing + , subq_2.booking__guest + , subq_2.booking__host + , subq_2.is_instant + , subq_2.booking__is_instant + , subq_2.bookings + , subq_2.instant_bookings + , subq_2.booking_value + , subq_2.max_booking_value + , subq_2.min_booking_value + , subq_2.bookers + , subq_2.average_booking_value + , subq_2.referred_bookings + , subq_2.median_booking_value + , subq_2.booking_value_p99 + , subq_2.discrete_booking_value_p99 + , subq_2.approximate_continuous_booking_value_p99 + , subq_2.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + GROUP BY + subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_1.listing = subq_7.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE listing__bookings > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql new file mode 100644 index 0000000000..58e480e7f8 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql @@ -0,0 +1,54 @@ +test_name: test_query_with_simple_metric_in_where_filter +test_filename: test_metric_filter_rendering.py +docstring: + Tests a query with a simple metric in the query-level where filter. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + subq_19.listing__bookings AS listing__bookings + , subq_13.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + LEFT OUTER JOIN + ( + -- Aggregate Measures + -- Compute Metrics via Expressions + -- Pass Only Elements: ['listing', 'listing__bookings'] + SELECT + listing + , SUM(bookings) AS listing__bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'listing'] + SELECT + listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + GROUP BY + listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + ON + subq_13.listing = subq_19.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +WHERE listing__bookings > 2 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql new file mode 100644 index 0000000000..33ceaf0847 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql @@ -0,0 +1,189 @@ +test_name: test_metric_time_dimension_transform_node_using_non_primary_time +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests converting a PlotTimeDimensionTransform node using a non-primary time dimension to SQL. +sql_engine: Clickhouse +--- +-- Metric Time Dimension 'paid_at' +SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.paid_at__day AS metric_time__day + , subq_0.paid_at__week AS metric_time__week + , subq_0.paid_at__month AS metric_time__month + , subq_0.paid_at__quarter AS metric_time__quarter + , subq_0.paid_at__year AS metric_time__year + , subq_0.paid_at__extract_year AS metric_time__extract_year + , subq_0.paid_at__extract_quarter AS metric_time__extract_quarter + , subq_0.paid_at__extract_month AS metric_time__extract_month + , subq_0.paid_at__extract_day AS metric_time__extract_day + , subq_0.paid_at__extract_dow AS metric_time__extract_dow + , subq_0.paid_at__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.booking_payments +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql new file mode 100644 index 0000000000..534903b5bc --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql @@ -0,0 +1,97 @@ +test_name: test_metric_time_dimension_transform_node_using_non_primary_time +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests converting a PlotTimeDimensionTransform node using a non-primary time dimension to SQL. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Metric Time Dimension 'paid_at' +SELECT + DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS paid_at__day + , DATE_TRUNC('week', paid_at) AS paid_at__week + , DATE_TRUNC('month', paid_at) AS paid_at__month + , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter + , DATE_TRUNC('year', paid_at) AS paid_at__year + , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy + , DATE_TRUNC('day', ds) AS booking__ds__day + , DATE_TRUNC('week', ds) AS booking__ds__week + , DATE_TRUNC('month', ds) AS booking__ds__month + , DATE_TRUNC('quarter', ds) AS booking__ds__quarter + , DATE_TRUNC('year', ds) AS booking__ds__year + , EXTRACT(toYear FROM ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy + , DATE_TRUNC('day', paid_at) AS metric_time__day + , DATE_TRUNC('week', paid_at) AS metric_time__week + , DATE_TRUNC('month', paid_at) AS metric_time__month + , DATE_TRUNC('quarter', paid_at) AS metric_time__quarter + , DATE_TRUNC('year', paid_at) AS metric_time__year + , EXTRACT(toYear FROM paid_at) AS metric_time__extract_year + , EXTRACT(toQuarter FROM paid_at) AS metric_time__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS metric_time__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS metric_time__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS metric_time__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS metric_time__extract_doy + , listing_id AS listing + , guest_id AS guest + , host_id AS host + , listing_id AS booking__listing + , guest_id AS booking__guest + , host_id AS booking__host + , is_instant + , is_instant AS booking__is_instant + , booking_value AS booking_payments +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql new file mode 100644 index 0000000000..fdda63bd7b --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql @@ -0,0 +1,201 @@ +test_name: test_metric_time_dimension_transform_node_using_primary_time +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests converting a PlotTimeDimensionTransform node using the primary time dimension to SQL. +sql_engine: Clickhouse +--- +-- Metric Time Dimension 'ds' +SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_0 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql new file mode 100644 index 0000000000..0d8dbdf9d4 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql @@ -0,0 +1,109 @@ +test_name: test_metric_time_dimension_transform_node_using_primary_time +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests converting a PlotTimeDimensionTransform node using the primary time dimension to SQL. +sql_engine: Clickhouse +--- +-- Read Elements From Semantic Model 'bookings_source' +-- Metric Time Dimension 'ds' +SELECT + DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('week', ds) AS ds__week + , DATE_TRUNC('month', ds) AS ds__month + , DATE_TRUNC('quarter', ds) AS ds__quarter + , DATE_TRUNC('year', ds) AS ds__year + , EXTRACT(toYear FROM ds) AS ds__extract_year + , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS paid_at__day + , DATE_TRUNC('week', paid_at) AS paid_at__week + , DATE_TRUNC('month', paid_at) AS paid_at__month + , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter + , DATE_TRUNC('year', paid_at) AS paid_at__year + , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy + , DATE_TRUNC('day', ds) AS booking__ds__day + , DATE_TRUNC('week', ds) AS booking__ds__week + , DATE_TRUNC('month', ds) AS booking__ds__month + , DATE_TRUNC('quarter', ds) AS booking__ds__quarter + , DATE_TRUNC('year', ds) AS booking__ds__year + , EXTRACT(toYear FROM ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy + , DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('week', ds) AS metric_time__week + , DATE_TRUNC('month', ds) AS metric_time__month + , DATE_TRUNC('quarter', ds) AS metric_time__quarter + , DATE_TRUNC('year', ds) AS metric_time__year + , EXTRACT(toYear FROM ds) AS metric_time__extract_year + , EXTRACT(toQuarter FROM ds) AS metric_time__extract_quarter + , EXTRACT(toMonth FROM ds) AS metric_time__extract_month + , EXTRACT(toDayOfMonth FROM ds) AS metric_time__extract_day + , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + , EXTRACT(toDayOfYear FROM ds) AS metric_time__extract_doy + , listing_id AS listing + , guest_id AS guest + , host_id AS host + , listing_id AS booking__listing + , guest_id AS booking__guest + , host_id AS booking__host + , is_instant + , is_instant AS booking__is_instant + , 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , booking_value + , booking_value AS max_booking_value + , booking_value AS min_booking_value + , guest_id AS bookers + , booking_value AS average_booking_value + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , booking_value AS median_booking_value + , booking_value AS booking_value_p99 + , booking_value AS discrete_booking_value_p99 + , booking_value AS approximate_continuous_booking_value_p99 + , booking_value AS approximate_discrete_booking_value_p99 +FROM ***************************.fct_bookings bookings_source_src_28000 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql new file mode 100644 index 0000000000..35e78a2edf --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql @@ -0,0 +1,445 @@ +test_name: test_simple_query_with_metric_time_dimension +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests building a query that uses measures defined from 2 different time dimensions. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) AS metric_time__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_9.booking_payments) AS booking_payments +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.booking_payments + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.booking_payments) AS booking_payments + FROM ( + -- Pass Only Elements: ['booking_payments', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.booking_payments + FROM ( + -- Metric Time Dimension 'paid_at' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.paid_at__day AS metric_time__day + , subq_5.paid_at__week AS metric_time__week + , subq_5.paid_at__month AS metric_time__month + , subq_5.paid_at__quarter AS metric_time__quarter + , subq_5.paid_at__year AS metric_time__year + , subq_5.paid_at__extract_year AS metric_time__extract_year + , subq_5.paid_at__extract_quarter AS metric_time__extract_quarter + , subq_5.paid_at__extract_month AS metric_time__extract_month + , subq_5.paid_at__extract_day AS metric_time__extract_day + , subq_5.paid_at__extract_dow AS metric_time__extract_dow + , subq_5.paid_at__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.booking_payments + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +ON + subq_4.metric_time__day = subq_9.metric_time__day +GROUP BY + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..24f43109f4 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql @@ -0,0 +1,56 @@ +test_name: test_simple_query_with_metric_time_dimension +test_filename: test_metric_time_dimension_to_sql.py +docstring: + Tests building a query that uses measures defined from 2 different time dimensions. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +WITH rss_28020_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , booking_value AS booking_payments + , DATE_TRUNC('day', ds) AS ds__day + , DATE_TRUNC('day', paid_at) AS paid_at__day + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(subq_14.metric_time__day, subq_19.metric_time__day) AS metric_time__day + , MAX(subq_14.bookings) AS bookings + , MAX(subq_19.booking_payments) AS booking_payments +FROM ( + -- Read From CTE For node_id=rss_28020 + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + ds__day AS metric_time__day + , SUM(bookings) AS bookings + FROM rss_28020_cte rss_28020_cte + GROUP BY + ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +FULL OUTER JOIN +( + -- Read From CTE For node_id=rss_28020 + -- Metric Time Dimension 'paid_at' + -- Pass Only Elements: ['booking_payments', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + paid_at__day AS metric_time__day + , SUM(booking_payments) AS booking_payments + FROM rss_28020_cte rss_28020_cte + GROUP BY + paid_at__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +ON + subq_14.metric_time__day = subq_19.metric_time__day +GROUP BY + COALESCE(subq_14.metric_time__day, subq_19.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql new file mode 100644 index 0000000000..a46f5579c5 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql @@ -0,0 +1,298 @@ +test_name: test_dimensions_with_time_constraint +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest', 'metric_time__day'] +SELECT + subq_7.metric_time__day + , subq_7.listing__is_lux_latest + , subq_7.user__home_state_latest +FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-03T00:00:00] + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.created_at__day + , subq_6.created_at__week + , subq_6.created_at__month + , subq_6.created_at__quarter + , subq_6.created_at__year + , subq_6.created_at__extract_year + , subq_6.created_at__extract_quarter + , subq_6.created_at__extract_month + , subq_6.created_at__extract_day + , subq_6.created_at__extract_dow + , subq_6.created_at__extract_doy + , subq_6.listing__ds__day + , subq_6.listing__ds__week + , subq_6.listing__ds__month + , subq_6.listing__ds__quarter + , subq_6.listing__ds__year + , subq_6.listing__ds__extract_year + , subq_6.listing__ds__extract_quarter + , subq_6.listing__ds__extract_month + , subq_6.listing__ds__extract_day + , subq_6.listing__ds__extract_dow + , subq_6.listing__ds__extract_doy + , subq_6.listing__created_at__day + , subq_6.listing__created_at__week + , subq_6.listing__created_at__month + , subq_6.listing__created_at__quarter + , subq_6.listing__created_at__year + , subq_6.listing__created_at__extract_year + , subq_6.listing__created_at__extract_quarter + , subq_6.listing__created_at__extract_month + , subq_6.listing__created_at__extract_day + , subq_6.listing__created_at__extract_dow + , subq_6.listing__created_at__extract_doy + , subq_6.metric_time__day + , subq_6.listing + , subq_6.user + , subq_6.listing__user + , subq_6.country_latest + , subq_6.is_lux_latest + , subq_6.capacity_latest + , subq_6.listing__country_latest + , subq_6.listing__is_lux_latest + , subq_6.listing__capacity_latest + , subq_6.user__home_state_latest + , subq_6.listings + , subq_6.largest_listing + , subq_6.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_5.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + CROSS JOIN + ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_2.metric_time__day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds__martian_day + , subq_1.ds__day AS metric_time__day + , subq_1.ds__week AS metric_time__week + , subq_1.ds__month AS metric_time__month + , subq_1.ds__quarter AS metric_time__quarter + , subq_1.ds__year AS metric_time__year + , subq_1.ds__extract_year AS metric_time__extract_year + , subq_1.ds__extract_quarter AS metric_time__extract_quarter + , subq_1.ds__extract_month AS metric_time__extract_month + , subq_1.ds__extract_day AS metric_time__extract_day + , subq_1.ds__extract_dow AS metric_time__extract_dow + , subq_1.ds__extract_doy AS metric_time__extract_doy + , subq_1.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_4.user + , subq_4.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + subq_0.user = subq_5.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE subq_6.metric_time__day BETWEEN '2020-01-01' AND '2020-01-03' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +GROUP BY + subq_7.metric_time__day + , subq_7.listing__is_lux_latest + , subq_7.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..7cca6f0519 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql @@ -0,0 +1,24 @@ +test_name: test_dimensions_with_time_constraint +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-03T00:00:00] +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest', 'metric_time__day'] +SELECT + time_spine_src_28006.ds AS metric_time__day + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , users_latest_src_28000.home_state_latest AS user__home_state_latest +FROM ***************************.dim_listings_latest listings_latest_src_28000 +CROSS JOIN + ***************************.mf_time_spine time_spine_src_28006 +FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 +ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id +WHERE time_spine_src_28006.ds BETWEEN '2020-01-01' AND '2020-01-03' +GROUP BY + time_spine_src_28006.ds + , listings_latest_src_28000.is_lux + , users_latest_src_28000.home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql new file mode 100644 index 0000000000..6cab947fc8 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql @@ -0,0 +1,59 @@ +test_name: test_metric_time_only +test_filename: test_metric_time_without_metrics.py +docstring: + Tests querying only metric time. +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__day',] +SELECT + subq_1.metric_time__day +FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds__martian_day + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +GROUP BY + subq_1.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql new file mode 100644 index 0000000000..954cf4082c --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql @@ -0,0 +1,15 @@ +test_name: test_metric_time_only +test_filename: test_metric_time_without_metrics.py +docstring: + Tests querying only metric time. +sql_engine: Clickhouse +--- +-- Read From Time Spine 'mf_time_spine' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['metric_time__day',] +SELECT + ds AS metric_time__day +FROM ***************************.mf_time_spine time_spine_src_28006 +GROUP BY + ds +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql new file mode 100644 index 0000000000..85b3dd1f35 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql @@ -0,0 +1,57 @@ +test_name: test_metric_time_quarter_alone +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['metric_time__quarter',] +SELECT + subq_1.metric_time__quarter +FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds__martian_day + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +GROUP BY + subq_1.metric_time__quarter +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql new file mode 100644 index 0000000000..996d5749e8 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql @@ -0,0 +1,13 @@ +test_name: test_metric_time_quarter_alone +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Read From Time Spine 'mf_time_spine' +-- Metric Time Dimension 'ds' +-- Pass Only Elements: ['metric_time__quarter',] +SELECT + DATE_TRUNC('quarter', ds) AS metric_time__quarter +FROM ***************************.mf_time_spine time_spine_src_28006 +GROUP BY + DATE_TRUNC('quarter', ds) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql new file mode 100644 index 0000000000..1e1432232d --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql @@ -0,0 +1,234 @@ +test_name: test_metric_time_with_other_dimensions +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest', 'metric_time__day'] +SELECT + subq_6.metric_time__day + , subq_6.listing__is_lux_latest + , subq_6.user__home_state_latest +FROM ( + -- Join Standard Outputs + SELECT + subq_5.home_state_latest AS user__home_state_latest + , subq_0.ds__day AS ds__day + , subq_0.ds__week AS ds__week + , subq_0.ds__month AS ds__month + , subq_0.ds__quarter AS ds__quarter + , subq_0.ds__year AS ds__year + , subq_0.ds__extract_year AS ds__extract_year + , subq_0.ds__extract_quarter AS ds__extract_quarter + , subq_0.ds__extract_month AS ds__extract_month + , subq_0.ds__extract_day AS ds__extract_day + , subq_0.ds__extract_dow AS ds__extract_dow + , subq_0.ds__extract_doy AS ds__extract_doy + , subq_0.created_at__day AS created_at__day + , subq_0.created_at__week AS created_at__week + , subq_0.created_at__month AS created_at__month + , subq_0.created_at__quarter AS created_at__quarter + , subq_0.created_at__year AS created_at__year + , subq_0.created_at__extract_year AS created_at__extract_year + , subq_0.created_at__extract_quarter AS created_at__extract_quarter + , subq_0.created_at__extract_month AS created_at__extract_month + , subq_0.created_at__extract_day AS created_at__extract_day + , subq_0.created_at__extract_dow AS created_at__extract_dow + , subq_0.created_at__extract_doy AS created_at__extract_doy + , subq_0.listing__ds__day AS listing__ds__day + , subq_0.listing__ds__week AS listing__ds__week + , subq_0.listing__ds__month AS listing__ds__month + , subq_0.listing__ds__quarter AS listing__ds__quarter + , subq_0.listing__ds__year AS listing__ds__year + , subq_0.listing__ds__extract_year AS listing__ds__extract_year + , subq_0.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_0.listing__ds__extract_month AS listing__ds__extract_month + , subq_0.listing__ds__extract_day AS listing__ds__extract_day + , subq_0.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_0.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_0.listing__created_at__day AS listing__created_at__day + , subq_0.listing__created_at__week AS listing__created_at__week + , subq_0.listing__created_at__month AS listing__created_at__month + , subq_0.listing__created_at__quarter AS listing__created_at__quarter + , subq_0.listing__created_at__year AS listing__created_at__year + , subq_0.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_0.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_0.listing AS listing + , subq_0.user AS user + , subq_0.listing__user AS listing__user + , subq_0.country_latest AS country_latest + , subq_0.is_lux_latest AS is_lux_latest + , subq_0.capacity_latest AS capacity_latest + , subq_0.listing__country_latest AS listing__country_latest + , subq_0.listing__is_lux_latest AS listing__is_lux_latest + , subq_0.listing__capacity_latest AS listing__capacity_latest + , subq_0.listings AS listings + , subq_0.largest_listing AS largest_listing + , subq_0.smallest_listing AS smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + CROSS JOIN + ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_2.metric_time__day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds__martian_day + , subq_1.ds__day AS metric_time__day + , subq_1.ds__week AS metric_time__week + , subq_1.ds__month AS metric_time__month + , subq_1.ds__quarter AS metric_time__quarter + , subq_1.ds__year AS metric_time__year + , subq_1.ds__extract_year AS metric_time__extract_year + , subq_1.ds__extract_quarter AS metric_time__extract_quarter + , subq_1.ds__extract_month AS metric_time__extract_month + , subq_1.ds__extract_day AS metric_time__extract_day + , subq_1.ds__extract_dow AS metric_time__extract_dow + , subq_1.ds__extract_doy AS metric_time__extract_doy + , subq_1.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + FULL OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_4.user + , subq_4.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + ON + subq_0.user = subq_5.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + subq_6.metric_time__day + , subq_6.listing__is_lux_latest + , subq_6.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql new file mode 100644 index 0000000000..1d41f35c08 --- /dev/null +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_metric_time_with_other_dimensions +test_filename: test_metric_time_without_metrics.py +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['user__home_state_latest', 'listing__is_lux_latest', 'metric_time__day'] +SELECT + time_spine_src_28006.ds AS metric_time__day + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , users_latest_src_28000.home_state_latest AS user__home_state_latest +FROM ***************************.dim_listings_latest listings_latest_src_28000 +CROSS JOIN + ***************************.mf_time_spine time_spine_src_28006 +FULL OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 +ON + listings_latest_src_28000.user_id = users_latest_src_28000.user_id +GROUP BY + time_spine_src_28006.ds + , listings_latest_src_28000.is_lux + , users_latest_src_28000.home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_multiple_granularities__query_output.txt new file mode 100644 index 0000000000..12d136bed0 --- /dev/null +++ b/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_multiple_granularities__query_output.txt @@ -0,0 +1,67 @@ +test_name: test_offset_to_grain_with_multiple_granularities +test_filename: test_offset_metrics.py +--- +metric_time__day metric_time__month metric_time__year bookings_at_start_of_month +------------------- -------------------- ------------------- ---------------------------- +2019-12-01T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-02T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-03T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-04T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-05T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-06T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-07T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-08T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-09T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-10T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-11T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-12T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-13T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-14T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-15T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-16T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-17T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-18T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-19T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-20T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-21T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-22T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-23T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-24T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-25T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-26T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-27T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-28T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-29T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-30T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2019-12-31T00:00:00 2019-12-01T00:00:00 2019-01-01T00:00:00 1 +2020-01-01T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-02T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-03T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-04T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-05T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-06T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-07T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-08T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-09T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-10T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-11T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-12T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-13T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-14T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-15T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-16T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-17T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-18T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-19T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-20T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-21T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-22T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-23T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-24T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-25T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-26T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-27T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-28T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-29T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-30T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 +2020-01-31T00:00:00 2020-01-01T00:00:00 2020-01-01T00:00:00 5 diff --git a/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_single_granularity__query_output.txt new file mode 100644 index 0000000000..dda3281d7f --- /dev/null +++ b/tests_metricflow/snapshots/test_offset_metrics.py/str/Clickhouse/test_offset_to_grain_with_single_granularity__query_output.txt @@ -0,0 +1,67 @@ +test_name: test_offset_to_grain_with_single_granularity +test_filename: test_offset_metrics.py +--- +metric_time__day bookings_at_start_of_month +------------------- ---------------------------- +2019-12-01T00:00:00 1 +2019-12-02T00:00:00 1 +2019-12-03T00:00:00 1 +2019-12-04T00:00:00 1 +2019-12-05T00:00:00 1 +2019-12-06T00:00:00 1 +2019-12-07T00:00:00 1 +2019-12-08T00:00:00 1 +2019-12-09T00:00:00 1 +2019-12-10T00:00:00 1 +2019-12-11T00:00:00 1 +2019-12-12T00:00:00 1 +2019-12-13T00:00:00 1 +2019-12-14T00:00:00 1 +2019-12-15T00:00:00 1 +2019-12-16T00:00:00 1 +2019-12-17T00:00:00 1 +2019-12-18T00:00:00 1 +2019-12-19T00:00:00 1 +2019-12-20T00:00:00 1 +2019-12-21T00:00:00 1 +2019-12-22T00:00:00 1 +2019-12-23T00:00:00 1 +2019-12-24T00:00:00 1 +2019-12-25T00:00:00 1 +2019-12-26T00:00:00 1 +2019-12-27T00:00:00 1 +2019-12-28T00:00:00 1 +2019-12-29T00:00:00 1 +2019-12-30T00:00:00 1 +2019-12-31T00:00:00 1 +2020-01-01T00:00:00 5 +2020-01-02T00:00:00 5 +2020-01-03T00:00:00 5 +2020-01-04T00:00:00 5 +2020-01-05T00:00:00 5 +2020-01-06T00:00:00 5 +2020-01-07T00:00:00 5 +2020-01-08T00:00:00 5 +2020-01-09T00:00:00 5 +2020-01-10T00:00:00 5 +2020-01-11T00:00:00 5 +2020-01-12T00:00:00 5 +2020-01-13T00:00:00 5 +2020-01-14T00:00:00 5 +2020-01-15T00:00:00 5 +2020-01-16T00:00:00 5 +2020-01-17T00:00:00 5 +2020-01-18T00:00:00 5 +2020-01-19T00:00:00 5 +2020-01-20T00:00:00 5 +2020-01-21T00:00:00 5 +2020-01-22T00:00:00 5 +2020-01-23T00:00:00 5 +2020-01-24T00:00:00 5 +2020-01-25T00:00:00 5 +2020-01-26T00:00:00 5 +2020-01-27T00:00:00 5 +2020-01-28T00:00:00 5 +2020-01-29T00:00:00 5 +2020-01-30T00:00:00 5 +2020-01-31T00:00:00 5 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql new file mode 100644 index 0000000000..d42ccf4e69 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql @@ -0,0 +1,734 @@ +test_name: test_conversion_metric_query_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a simple predicate on a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_22.metric_time__day + , subq_22.user__home_state_latest + , CAST(subq_22.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_22.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , COALESCE(subq_7.user__home_state_latest, subq_21.user__home_state_latest) AS user__home_state_latest + , MAX(subq_7.visits) AS visits + , MAX(subq_21.buys) AS buys + FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , subq_6.user__home_state_latest + , SUM(subq_6.visits) AS visits + FROM ( + -- Pass Only Elements: ['visits', 'user__home_state_latest', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.user__home_state_latest + , subq_5.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.visit__ds__day + , subq_4.visit__ds__week + , subq_4.visit__ds__month + , subq_4.visit__ds__quarter + , subq_4.visit__ds__year + , subq_4.visit__ds__extract_year + , subq_4.visit__ds__extract_quarter + , subq_4.visit__ds__extract_month + , subq_4.visit__ds__extract_day + , subq_4.visit__ds__extract_dow + , subq_4.visit__ds__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.user + , subq_4.session + , subq_4.visit__user + , subq_4.visit__session + , subq_4.referrer_id + , subq_4.visit__referrer_id + , subq_4.user__home_state_latest + , subq_4.visits + , subq_4.visitors + FROM ( + -- Join Standard Outputs + SELECT + subq_3.home_state_latest AS user__home_state_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.visit__ds__day AS visit__ds__day + , subq_1.visit__ds__week AS visit__ds__week + , subq_1.visit__ds__month AS visit__ds__month + , subq_1.visit__ds__quarter AS visit__ds__quarter + , subq_1.visit__ds__year AS visit__ds__year + , subq_1.visit__ds__extract_year AS visit__ds__extract_year + , subq_1.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_1.visit__ds__extract_month AS visit__ds__extract_month + , subq_1.visit__ds__extract_day AS visit__ds__extract_day + , subq_1.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_1.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.user AS user + , subq_1.session AS session + , subq_1.visit__user AS visit__user + , subq_1.visit__session AS visit__session + , subq_1.referrer_id AS referrer_id + , subq_1.visit__referrer_id AS visit__referrer_id + , subq_1.visits AS visits + , subq_1.visitors AS visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.visit__ds__day + , subq_0.visit__ds__week + , subq_0.visit__ds__month + , subq_0.visit__ds__quarter + , subq_0.visit__ds__year + , subq_0.visit__ds__extract_year + , subq_0.visit__ds__extract_quarter + , subq_0.visit__ds__extract_month + , subq_0.visit__ds__extract_day + , subq_0.visit__ds__extract_dow + , subq_0.visit__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.user + , subq_0.session + , subq_0.visit__user + , subq_0.visit__session + , subq_0.referrer_id + , subq_0.visit__referrer_id + , subq_0.visits + , subq_0.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_2.user + , subq_2.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.user = subq_3.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + WHERE visit__referrer_id = '123456' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + , subq_6.user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + FULL OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_20.metric_time__day + , subq_20.user__home_state_latest + , SUM(subq_20.buys) AS buys + FROM ( + -- Pass Only Elements: ['buys', 'user__home_state_latest', 'metric_time__day'] + SELECT + subq_19.metric_time__day + , subq_19.user__home_state_latest + , subq_19.buys + FROM ( + -- Find conversions for user within the range of 7 day + SELECT + subq_18.metric_time__day + , subq_18.user + , subq_18.visit__referrer_id + , subq_18.user__home_state_latest + , subq_18.buys + , subq_18.visits + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_14.visits) OVER ( + PARTITION BY + subq_17.user + , subq_17.metric_time__day + , subq_17.mf_internal_uuid + ORDER BY subq_14.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_14.visit__referrer_id) OVER ( + PARTITION BY + subq_17.user + , subq_17.metric_time__day + , subq_17.mf_internal_uuid + ORDER BY subq_14.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_14.user__home_state_latest) OVER ( + PARTITION BY + subq_17.user + , subq_17.metric_time__day + , subq_17.mf_internal_uuid + ORDER BY subq_14.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user__home_state_latest + , FIRST_VALUE(subq_14.metric_time__day) OVER ( + PARTITION BY + subq_17.user + , subq_17.metric_time__day + , subq_17.mf_internal_uuid + ORDER BY subq_14.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_14.user) OVER ( + PARTITION BY + subq_17.user + , subq_17.metric_time__day + , subq_17.mf_internal_uuid + ORDER BY subq_14.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_17.mf_internal_uuid AS mf_internal_uuid + , subq_17.buys AS buys + FROM ( + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'user__home_state_latest', 'metric_time__day', 'user'] + SELECT + subq_13.metric_time__day + , subq_13.user + , subq_13.visit__referrer_id + , subq_13.user__home_state_latest + , subq_13.visits + FROM ( + -- Constrain Output with WHERE + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.visit__ds__day + , subq_12.visit__ds__week + , subq_12.visit__ds__month + , subq_12.visit__ds__quarter + , subq_12.visit__ds__year + , subq_12.visit__ds__extract_year + , subq_12.visit__ds__extract_quarter + , subq_12.visit__ds__extract_month + , subq_12.visit__ds__extract_day + , subq_12.visit__ds__extract_dow + , subq_12.visit__ds__extract_doy + , subq_12.metric_time__day + , subq_12.metric_time__week + , subq_12.metric_time__month + , subq_12.metric_time__quarter + , subq_12.metric_time__year + , subq_12.metric_time__extract_year + , subq_12.metric_time__extract_quarter + , subq_12.metric_time__extract_month + , subq_12.metric_time__extract_day + , subq_12.metric_time__extract_dow + , subq_12.metric_time__extract_doy + , subq_12.user + , subq_12.session + , subq_12.visit__user + , subq_12.visit__session + , subq_12.referrer_id + , subq_12.visit__referrer_id + , subq_12.user__home_state_latest + , subq_12.visits + , subq_12.visitors + FROM ( + -- Join Standard Outputs + SELECT + subq_11.home_state_latest AS user__home_state_latest + , subq_9.ds__day AS ds__day + , subq_9.ds__week AS ds__week + , subq_9.ds__month AS ds__month + , subq_9.ds__quarter AS ds__quarter + , subq_9.ds__year AS ds__year + , subq_9.ds__extract_year AS ds__extract_year + , subq_9.ds__extract_quarter AS ds__extract_quarter + , subq_9.ds__extract_month AS ds__extract_month + , subq_9.ds__extract_day AS ds__extract_day + , subq_9.ds__extract_dow AS ds__extract_dow + , subq_9.ds__extract_doy AS ds__extract_doy + , subq_9.visit__ds__day AS visit__ds__day + , subq_9.visit__ds__week AS visit__ds__week + , subq_9.visit__ds__month AS visit__ds__month + , subq_9.visit__ds__quarter AS visit__ds__quarter + , subq_9.visit__ds__year AS visit__ds__year + , subq_9.visit__ds__extract_year AS visit__ds__extract_year + , subq_9.visit__ds__extract_quarter AS visit__ds__extract_quarter + , subq_9.visit__ds__extract_month AS visit__ds__extract_month + , subq_9.visit__ds__extract_day AS visit__ds__extract_day + , subq_9.visit__ds__extract_dow AS visit__ds__extract_dow + , subq_9.visit__ds__extract_doy AS visit__ds__extract_doy + , subq_9.metric_time__day AS metric_time__day + , subq_9.metric_time__week AS metric_time__week + , subq_9.metric_time__month AS metric_time__month + , subq_9.metric_time__quarter AS metric_time__quarter + , subq_9.metric_time__year AS metric_time__year + , subq_9.metric_time__extract_year AS metric_time__extract_year + , subq_9.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_9.metric_time__extract_month AS metric_time__extract_month + , subq_9.metric_time__extract_day AS metric_time__extract_day + , subq_9.metric_time__extract_dow AS metric_time__extract_dow + , subq_9.metric_time__extract_doy AS metric_time__extract_doy + , subq_9.user AS user + , subq_9.session AS session + , subq_9.visit__user AS visit__user + , subq_9.visit__session AS visit__session + , subq_9.referrer_id AS referrer_id + , subq_9.visit__referrer_id AS visit__referrer_id + , subq_9.visits AS visits + , subq_9.visitors AS visitors + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.visit__ds__day + , subq_8.visit__ds__week + , subq_8.visit__ds__month + , subq_8.visit__ds__quarter + , subq_8.visit__ds__year + , subq_8.visit__ds__extract_year + , subq_8.visit__ds__extract_quarter + , subq_8.visit__ds__extract_month + , subq_8.visit__ds__extract_day + , subq_8.visit__ds__extract_dow + , subq_8.visit__ds__extract_doy + , subq_8.ds__day AS metric_time__day + , subq_8.ds__week AS metric_time__week + , subq_8.ds__month AS metric_time__month + , subq_8.ds__quarter AS metric_time__quarter + , subq_8.ds__year AS metric_time__year + , subq_8.ds__extract_year AS metric_time__extract_year + , subq_8.ds__extract_quarter AS metric_time__extract_quarter + , subq_8.ds__extract_month AS metric_time__extract_month + , subq_8.ds__extract_day AS metric_time__extract_day + , subq_8.ds__extract_dow AS metric_time__extract_dow + , subq_8.ds__extract_doy AS metric_time__extract_doy + , subq_8.user + , subq_8.session + , subq_8.visit__user + , subq_8.visit__session + , subq_8.referrer_id + , subq_8.visit__referrer_id + , subq_8.visits + , subq_8.visitors + FROM ( + -- Read Elements From Semantic Model 'visits_source' + SELECT + 1 AS visits + , visits_source_src_28000.user_id AS visitors + , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , visits_source_src_28000.referrer_id + , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day + , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week + , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month + , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year + , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year + , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter + , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month + , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day + , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow + , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , visits_source_src_28000.referrer_id AS visit__referrer_id + , visits_source_src_28000.user_id AS user + , visits_source_src_28000.session_id AS session + , visits_source_src_28000.user_id AS visit__user + , visits_source_src_28000.session_id AS visit__session + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_10.user + , subq_10.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + subq_9.user = subq_11.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + WHERE visit__referrer_id = '123456' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + CROSS JOIN + ( + -- Add column with generated UUID + SELECT + subq_16.ds__day + , subq_16.ds__week + , subq_16.ds__month + , subq_16.ds__quarter + , subq_16.ds__year + , subq_16.ds__extract_year + , subq_16.ds__extract_quarter + , subq_16.ds__extract_month + , subq_16.ds__extract_day + , subq_16.ds__extract_dow + , subq_16.ds__extract_doy + , subq_16.ds_month__month + , subq_16.ds_month__quarter + , subq_16.ds_month__year + , subq_16.ds_month__extract_year + , subq_16.ds_month__extract_quarter + , subq_16.ds_month__extract_month + , subq_16.buy__ds__day + , subq_16.buy__ds__week + , subq_16.buy__ds__month + , subq_16.buy__ds__quarter + , subq_16.buy__ds__year + , subq_16.buy__ds__extract_year + , subq_16.buy__ds__extract_quarter + , subq_16.buy__ds__extract_month + , subq_16.buy__ds__extract_day + , subq_16.buy__ds__extract_dow + , subq_16.buy__ds__extract_doy + , subq_16.buy__ds_month__month + , subq_16.buy__ds_month__quarter + , subq_16.buy__ds_month__year + , subq_16.buy__ds_month__extract_year + , subq_16.buy__ds_month__extract_quarter + , subq_16.buy__ds_month__extract_month + , subq_16.metric_time__day + , subq_16.metric_time__week + , subq_16.metric_time__month + , subq_16.metric_time__quarter + , subq_16.metric_time__year + , subq_16.metric_time__extract_year + , subq_16.metric_time__extract_quarter + , subq_16.metric_time__extract_month + , subq_16.metric_time__extract_day + , subq_16.metric_time__extract_dow + , subq_16.metric_time__extract_doy + , subq_16.user + , subq_16.session_id + , subq_16.buy__user + , subq_16.buy__session_id + , subq_16.buys + , subq_16.buyers + , generateUUIDv4() AS mf_internal_uuid + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.ds_month__month + , subq_15.ds_month__quarter + , subq_15.ds_month__year + , subq_15.ds_month__extract_year + , subq_15.ds_month__extract_quarter + , subq_15.ds_month__extract_month + , subq_15.buy__ds__day + , subq_15.buy__ds__week + , subq_15.buy__ds__month + , subq_15.buy__ds__quarter + , subq_15.buy__ds__year + , subq_15.buy__ds__extract_year + , subq_15.buy__ds__extract_quarter + , subq_15.buy__ds__extract_month + , subq_15.buy__ds__extract_day + , subq_15.buy__ds__extract_dow + , subq_15.buy__ds__extract_doy + , subq_15.buy__ds_month__month + , subq_15.buy__ds_month__quarter + , subq_15.buy__ds_month__year + , subq_15.buy__ds_month__extract_year + , subq_15.buy__ds_month__extract_quarter + , subq_15.buy__ds_month__extract_month + , subq_15.ds__day AS metric_time__day + , subq_15.ds__week AS metric_time__week + , subq_15.ds__month AS metric_time__month + , subq_15.ds__quarter AS metric_time__quarter + , subq_15.ds__year AS metric_time__year + , subq_15.ds__extract_year AS metric_time__extract_year + , subq_15.ds__extract_quarter AS metric_time__extract_quarter + , subq_15.ds__extract_month AS metric_time__extract_month + , subq_15.ds__extract_day AS metric_time__extract_day + , subq_15.ds__extract_dow AS metric_time__extract_dow + , subq_15.ds__extract_doy AS metric_time__extract_doy + , subq_15.user + , subq_15.session_id + , subq_15.buy__user + , subq_15.buy__session_id + , subq_15.buys + , subq_15.buyers + FROM ( + -- Read Elements From Semantic Model 'buys_source' + SELECT + 1 AS buys + , 1 AS buys_month + , buys_source_src_28000.user_id AS buyers + , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month + , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day + , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week + , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year + , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month + , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day + , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow + , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy + , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , buys_source_src_28000.user_id AS user + , buys_source_src_28000.session_id + , buys_source_src_28000.user_id AS buy__user + , buys_source_src_28000.session_id AS buy__session_id + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + GROUP BY + subq_20.metric_time__day + , subq_20.user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + ( + subq_7.user__home_state_latest = subq_21.user__home_state_latest + ) AND ( + subq_7.metric_time__day = subq_21.metric_time__day + ) + GROUP BY + COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) + , COALESCE(subq_7.user__home_state_latest, subq_21.user__home_state_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql new file mode 100644 index 0000000000..a115ab1521 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql @@ -0,0 +1,180 @@ +test_name: test_conversion_metric_query_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a simple predicate on a conversion metric. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28019_cte AS ( + -- Read Elements From Semantic Model 'visits_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , referrer_id AS visit__referrer_id + , 1 AS visits + FROM ***************************.fct_visits visits_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28028_cte AS ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + home_state_latest + , user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , user__home_state_latest AS user__home_state_latest + , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) AS metric_time__day + , COALESCE(subq_30.user__home_state_latest, subq_43.user__home_state_latest) AS user__home_state_latest + , MAX(subq_30.visits) AS visits + , MAX(subq_43.buys) AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'user__home_state_latest', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , user__home_state_latest + , SUM(visits) AS visits + FROM ( + -- Join Standard Outputs + SELECT + rss_28028_cte.home_state_latest AS user__home_state_latest + , sma_28019_cte.metric_time__day AS metric_time__day + , sma_28019_cte.visit__referrer_id AS visit__referrer_id + , sma_28019_cte.visits AS visits + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + rss_28028_cte rss_28028_cte + ON + sma_28019_cte.user = rss_28028_cte.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + WHERE visit__referrer_id = '123456' + GROUP BY + metric_time__day + , user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + FULL OUTER JOIN + ( + -- Find conversions for user within the range of 7 day + -- Pass Only Elements: ['buys', 'user__home_state_latest', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , user__home_state_latest + , SUM(buys) AS buys + FROM ( + -- Dedupe the fanout with mf_internal_uuid in the conversion data set + SELECT DISTINCT + FIRST_VALUE(subq_36.visits) OVER ( + PARTITION BY + subq_39.user + , subq_39.metric_time__day + , subq_39.mf_internal_uuid + ORDER BY subq_36.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visits + , FIRST_VALUE(subq_36.visit__referrer_id) OVER ( + PARTITION BY + subq_39.user + , subq_39.metric_time__day + , subq_39.mf_internal_uuid + ORDER BY subq_36.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS visit__referrer_id + , FIRST_VALUE(subq_36.user__home_state_latest) OVER ( + PARTITION BY + subq_39.user + , subq_39.metric_time__day + , subq_39.mf_internal_uuid + ORDER BY subq_36.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user__home_state_latest + , FIRST_VALUE(subq_36.metric_time__day) OVER ( + PARTITION BY + subq_39.user + , subq_39.metric_time__day + , subq_39.mf_internal_uuid + ORDER BY subq_36.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS metric_time__day + , FIRST_VALUE(subq_36.user) OVER ( + PARTITION BY + subq_39.user + , subq_39.metric_time__day + , subq_39.mf_internal_uuid + ORDER BY subq_36.metric_time__day DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) AS user + , subq_39.mf_internal_uuid AS mf_internal_uuid + , subq_39.buys AS buys + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['visits', 'visit__referrer_id', 'user__home_state_latest', 'metric_time__day', 'user'] + SELECT + metric_time__day + , subq_34.user + , visit__referrer_id + , user__home_state_latest + , visits + FROM ( + -- Join Standard Outputs + SELECT + rss_28028_cte.home_state_latest AS user__home_state_latest + , sma_28019_cte.metric_time__day AS metric_time__day + , sma_28019_cte.user AS user + , sma_28019_cte.visit__referrer_id AS visit__referrer_id + , sma_28019_cte.visits AS visits + FROM sma_28019_cte sma_28019_cte + LEFT OUTER JOIN + rss_28028_cte rss_28028_cte + ON + sma_28019_cte.user = rss_28028_cte.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + WHERE visit__referrer_id = '123456' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_36 + CROSS JOIN + ( + -- Read Elements From Semantic Model 'buys_source' + -- Metric Time Dimension 'ds' + -- Add column with generated UUID + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , user_id AS user + , 1 AS buys + , generateUUIDv4() AS mf_internal_uuid + FROM ***************************.fct_buys buys_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_39 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_40 + GROUP BY + metric_time__day + , user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_43 + ON + ( + subq_30.user__home_state_latest = subq_43.user__home_state_latest + ) AND ( + subq_30.metric_time__day = subq_43.metric_time__day + ) + GROUP BY + COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) + , COALESCE(subq_30.user__home_state_latest, subq_43.user__home_state_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_44 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql new file mode 100644 index 0000000000..5044a1989f --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql @@ -0,0 +1,694 @@ +test_name: test_cumulative_metric_with_query_time_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a query against a cumulative metric. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day + , subq_11.listing__country_latest + , subq_11.bookers AS every_two_days_bookers +FROM ( + -- Aggregate Measures + SELECT + subq_10.metric_time__day + , subq_10.listing__country_latest + , COUNT(DISTINCT subq_10.bookers) AS bookers + FROM ( + -- Pass Only Elements: ['bookers', 'listing__country_latest', 'metric_time__day'] + SELECT + subq_9.metric_time__day + , subq_9.listing__country_latest + , subq_9.bookers + FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.ds__day + , subq_8.ds__week + , subq_8.ds__month + , subq_8.ds__quarter + , subq_8.ds__year + , subq_8.ds__extract_year + , subq_8.ds__extract_quarter + , subq_8.ds__extract_month + , subq_8.ds__extract_day + , subq_8.ds__extract_dow + , subq_8.ds__extract_doy + , subq_8.ds_partitioned__day + , subq_8.ds_partitioned__week + , subq_8.ds_partitioned__month + , subq_8.ds_partitioned__quarter + , subq_8.ds_partitioned__year + , subq_8.ds_partitioned__extract_year + , subq_8.ds_partitioned__extract_quarter + , subq_8.ds_partitioned__extract_month + , subq_8.ds_partitioned__extract_day + , subq_8.ds_partitioned__extract_dow + , subq_8.ds_partitioned__extract_doy + , subq_8.paid_at__day + , subq_8.paid_at__week + , subq_8.paid_at__month + , subq_8.paid_at__quarter + , subq_8.paid_at__year + , subq_8.paid_at__extract_year + , subq_8.paid_at__extract_quarter + , subq_8.paid_at__extract_month + , subq_8.paid_at__extract_day + , subq_8.paid_at__extract_dow + , subq_8.paid_at__extract_doy + , subq_8.booking__ds__day + , subq_8.booking__ds__week + , subq_8.booking__ds__month + , subq_8.booking__ds__quarter + , subq_8.booking__ds__year + , subq_8.booking__ds__extract_year + , subq_8.booking__ds__extract_quarter + , subq_8.booking__ds__extract_month + , subq_8.booking__ds__extract_day + , subq_8.booking__ds__extract_dow + , subq_8.booking__ds__extract_doy + , subq_8.booking__ds_partitioned__day + , subq_8.booking__ds_partitioned__week + , subq_8.booking__ds_partitioned__month + , subq_8.booking__ds_partitioned__quarter + , subq_8.booking__ds_partitioned__year + , subq_8.booking__ds_partitioned__extract_year + , subq_8.booking__ds_partitioned__extract_quarter + , subq_8.booking__ds_partitioned__extract_month + , subq_8.booking__ds_partitioned__extract_day + , subq_8.booking__ds_partitioned__extract_dow + , subq_8.booking__ds_partitioned__extract_doy + , subq_8.booking__paid_at__day + , subq_8.booking__paid_at__week + , subq_8.booking__paid_at__month + , subq_8.booking__paid_at__quarter + , subq_8.booking__paid_at__year + , subq_8.booking__paid_at__extract_year + , subq_8.booking__paid_at__extract_quarter + , subq_8.booking__paid_at__extract_month + , subq_8.booking__paid_at__extract_day + , subq_8.booking__paid_at__extract_dow + , subq_8.booking__paid_at__extract_doy + , subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.metric_time__month + , subq_8.metric_time__quarter + , subq_8.metric_time__year + , subq_8.metric_time__extract_year + , subq_8.metric_time__extract_quarter + , subq_8.metric_time__extract_month + , subq_8.metric_time__extract_day + , subq_8.metric_time__extract_dow + , subq_8.metric_time__extract_doy + , subq_8.listing + , subq_8.guest + , subq_8.host + , subq_8.booking__listing + , subq_8.booking__guest + , subq_8.booking__host + , subq_8.is_instant + , subq_8.booking__is_instant + , subq_8.listing__country_latest + , subq_8.bookings + , subq_8.instant_bookings + , subq_8.booking_value + , subq_8.max_booking_value + , subq_8.min_booking_value + , subq_8.bookers + , subq_8.average_booking_value + , subq_8.referred_bookings + , subq_8.median_booking_value + , subq_8.booking_value_p99 + , subq_8.discrete_booking_value_p99 + , subq_8.approximate_continuous_booking_value_p99 + , subq_8.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_7.country_latest AS listing__country_latest + , subq_4.ds__day AS ds__day + , subq_4.ds__week AS ds__week + , subq_4.ds__month AS ds__month + , subq_4.ds__quarter AS ds__quarter + , subq_4.ds__year AS ds__year + , subq_4.ds__extract_year AS ds__extract_year + , subq_4.ds__extract_quarter AS ds__extract_quarter + , subq_4.ds__extract_month AS ds__extract_month + , subq_4.ds__extract_day AS ds__extract_day + , subq_4.ds__extract_dow AS ds__extract_dow + , subq_4.ds__extract_doy AS ds__extract_doy + , subq_4.ds_partitioned__day AS ds_partitioned__day + , subq_4.ds_partitioned__week AS ds_partitioned__week + , subq_4.ds_partitioned__month AS ds_partitioned__month + , subq_4.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_4.ds_partitioned__year AS ds_partitioned__year + , subq_4.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_4.paid_at__day AS paid_at__day + , subq_4.paid_at__week AS paid_at__week + , subq_4.paid_at__month AS paid_at__month + , subq_4.paid_at__quarter AS paid_at__quarter + , subq_4.paid_at__year AS paid_at__year + , subq_4.paid_at__extract_year AS paid_at__extract_year + , subq_4.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_4.paid_at__extract_month AS paid_at__extract_month + , subq_4.paid_at__extract_day AS paid_at__extract_day + , subq_4.paid_at__extract_dow AS paid_at__extract_dow + , subq_4.paid_at__extract_doy AS paid_at__extract_doy + , subq_4.booking__ds__day AS booking__ds__day + , subq_4.booking__ds__week AS booking__ds__week + , subq_4.booking__ds__month AS booking__ds__month + , subq_4.booking__ds__quarter AS booking__ds__quarter + , subq_4.booking__ds__year AS booking__ds__year + , subq_4.booking__ds__extract_year AS booking__ds__extract_year + , subq_4.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_4.booking__ds__extract_month AS booking__ds__extract_month + , subq_4.booking__ds__extract_day AS booking__ds__extract_day + , subq_4.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_4.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day AS booking__paid_at__day + , subq_4.booking__paid_at__week AS booking__paid_at__week + , subq_4.booking__paid_at__month AS booking__paid_at__month + , subq_4.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_4.booking__paid_at__year AS booking__paid_at__year + , subq_4.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_4.metric_time__day AS metric_time__day + , subq_4.metric_time__week AS metric_time__week + , subq_4.metric_time__month AS metric_time__month + , subq_4.metric_time__quarter AS metric_time__quarter + , subq_4.metric_time__year AS metric_time__year + , subq_4.metric_time__extract_year AS metric_time__extract_year + , subq_4.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_4.metric_time__extract_month AS metric_time__extract_month + , subq_4.metric_time__extract_day AS metric_time__extract_day + , subq_4.metric_time__extract_dow AS metric_time__extract_dow + , subq_4.metric_time__extract_doy AS metric_time__extract_doy + , subq_4.listing AS listing + , subq_4.guest AS guest + , subq_4.host AS host + , subq_4.booking__listing AS booking__listing + , subq_4.booking__guest AS booking__guest + , subq_4.booking__host AS booking__host + , subq_4.is_instant AS is_instant + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + , subq_4.instant_bookings AS instant_bookings + , subq_4.booking_value AS booking_value + , subq_4.max_booking_value AS max_booking_value + , subq_4.min_booking_value AS min_booking_value + , subq_4.bookers AS bookers + , subq_4.average_booking_value AS average_booking_value + , subq_4.referred_bookings AS referred_bookings + , subq_4.median_booking_value AS median_booking_value + , subq_4.booking_value_p99 AS booking_value_p99 + , subq_4.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_4.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_4.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Join Self Over Time Range + SELECT + subq_2.metric_time__day AS metric_time__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + subq_3.ds AS metric_time__day + FROM ***************************.mf_time_spine subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + CROSS JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_6.listing + , subq_6.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.created_at__day + , subq_5.created_at__week + , subq_5.created_at__month + , subq_5.created_at__quarter + , subq_5.created_at__year + , subq_5.created_at__extract_year + , subq_5.created_at__extract_quarter + , subq_5.created_at__extract_month + , subq_5.created_at__extract_day + , subq_5.created_at__extract_dow + , subq_5.created_at__extract_doy + , subq_5.listing__ds__day + , subq_5.listing__ds__week + , subq_5.listing__ds__month + , subq_5.listing__ds__quarter + , subq_5.listing__ds__year + , subq_5.listing__ds__extract_year + , subq_5.listing__ds__extract_quarter + , subq_5.listing__ds__extract_month + , subq_5.listing__ds__extract_day + , subq_5.listing__ds__extract_dow + , subq_5.listing__ds__extract_doy + , subq_5.listing__created_at__day + , subq_5.listing__created_at__week + , subq_5.listing__created_at__month + , subq_5.listing__created_at__quarter + , subq_5.listing__created_at__year + , subq_5.listing__created_at__extract_year + , subq_5.listing__created_at__extract_quarter + , subq_5.listing__created_at__extract_month + , subq_5.listing__created_at__extract_day + , subq_5.listing__created_at__extract_dow + , subq_5.listing__created_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.user + , subq_5.listing__user + , subq_5.country_latest + , subq_5.is_lux_latest + , subq_5.capacity_latest + , subq_5.listing__country_latest + , subq_5.listing__is_lux_latest + , subq_5.listing__capacity_latest + , subq_5.listings + , subq_5.largest_listing + , subq_5.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + ON + subq_4.listing = subq_7.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.metric_time__day + , subq_10.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql new file mode 100644 index 0000000000..fc5b3b0983 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql @@ -0,0 +1,46 @@ +test_name: test_cumulative_metric_with_query_time_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a query against a cumulative metric. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookers', 'listing__country_latest', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , listing__country_latest + , COUNT(DISTINCT bookers) AS every_two_days_bookers +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.country AS listing__country_latest + , subq_16.metric_time__day AS metric_time__day + , subq_16.booking__is_instant AS booking__is_instant + , subq_16.bookers AS bookers + FROM ( + -- Join Self Over Time Range + SELECT + subq_15.ds AS metric_time__day + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.is_instant AS booking__is_instant + , bookings_source_src_28000.guest_id AS bookers + FROM ***************************.mf_time_spine subq_15 + CROSS JOIN + ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_16.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +WHERE booking__is_instant +GROUP BY + metric_time__day + , listing__country_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql new file mode 100644 index 0000000000..57c027c251 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql @@ -0,0 +1,576 @@ +test_name: test_different_filters_on_same_measure_source_categorical_dimension +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where multiple filters against the same measure dimension need to be an effective OR. + + This can be an issue where a derived metric takes in two filters that refer to the same dimension from the input + measure source. If these filters are disjoint the predicate pushdown needs to ensure that all matching rows are + returned, so we cannot simply push one filter or the other down, nor can we push them down as an AND - they + must be an OR, since all relevant rows need to be returned to the requesting metrics. + + The metric listed here has one input that filters on bookings__is_instant and another that does not, which means + the source input for the latter input must NOT have the filter applied to it. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day + , CAST(subq_11.average_booking_value AS DOUBLE PRECISION) / CAST(NULLIF(subq_11.max_booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_fraction_of_max_value +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) AS metric_time__day + , MAX(subq_5.average_booking_value) AS average_booking_value + , MAX(subq_10.max_booking_value) AS max_booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , subq_4.average_booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , AVG(subq_3.average_booking_value) AS average_booking_value + FROM ( + -- Pass Only Elements: ['average_booking_value', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.average_booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_9.metric_time__day + , subq_9.max_booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , MAX(subq_8.max_booking_value) AS max_booking_value + FROM ( + -- Pass Only Elements: ['max_booking_value', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.max_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds_partitioned__day + , subq_6.ds_partitioned__week + , subq_6.ds_partitioned__month + , subq_6.ds_partitioned__quarter + , subq_6.ds_partitioned__year + , subq_6.ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy + , subq_6.paid_at__day + , subq_6.paid_at__week + , subq_6.paid_at__month + , subq_6.paid_at__quarter + , subq_6.paid_at__year + , subq_6.paid_at__extract_year + , subq_6.paid_at__extract_quarter + , subq_6.paid_at__extract_month + , subq_6.paid_at__extract_day + , subq_6.paid_at__extract_dow + , subq_6.paid_at__extract_doy + , subq_6.booking__ds__day + , subq_6.booking__ds__week + , subq_6.booking__ds__month + , subq_6.booking__ds__quarter + , subq_6.booking__ds__year + , subq_6.booking__ds__extract_year + , subq_6.booking__ds__extract_quarter + , subq_6.booking__ds__extract_month + , subq_6.booking__ds__extract_day + , subq_6.booking__ds__extract_dow + , subq_6.booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day + , subq_6.booking__paid_at__week + , subq_6.booking__paid_at__month + , subq_6.booking__paid_at__quarter + , subq_6.booking__paid_at__year + , subq_6.booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.guest + , subq_6.host + , subq_6.booking__listing + , subq_6.booking__guest + , subq_6.booking__host + , subq_6.is_instant + , subq_6.booking__is_instant + , subq_6.bookings + , subq_6.instant_bookings + , subq_6.booking_value + , subq_6.max_booking_value + , subq_6.min_booking_value + , subq_6.bookers + , subq_6.average_booking_value + , subq_6.referred_bookings + , subq_6.median_booking_value + , subq_6.booking_value_p99 + , subq_6.discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + subq_5.metric_time__day = subq_10.metric_time__day + GROUP BY + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..45bc6e2082 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql @@ -0,0 +1,80 @@ +test_name: test_different_filters_on_same_measure_source_categorical_dimension +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where multiple filters against the same measure dimension need to be an effective OR. + + This can be an issue where a derived metric takes in two filters that refer to the same dimension from the input + measure source. If these filters are disjoint the predicate pushdown needs to ensure that all matching rows are + returned, so we cannot simply push one filter or the other down, nor can we push them down as an AND - they + must be an OR, since all relevant rows need to be returned to the requesting metrics. + + The metric listed here has one input that filters on bookings__is_instant and another that does not, which means + the source input for the latter input must NOT have the filter applied to it. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , booking_value AS max_booking_value + , booking_value AS average_booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , CAST(average_booking_value AS DOUBLE PRECISION) / CAST(NULLIF(max_booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_fraction_of_max_value +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , MAX(subq_17.average_booking_value) AS average_booking_value + , MAX(subq_21.max_booking_value) AS max_booking_value + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['average_booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , AVG(average_booking_value) AS average_booking_value + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + metric_time__day + , booking__is_instant + , max_booking_value + , average_booking_value + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE booking__is_instant + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + FULL OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['max_booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , MAX(max_booking_value) AS max_booking_value + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + subq_17.metric_time__day = subq_21.metric_time__day + GROUP BY + COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql new file mode 100644 index 0000000000..5ed7ff55ba --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql @@ -0,0 +1,1438 @@ +test_name: test_fill_nulls_time_spine_metric_predicate_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a metric with a time spine and fill_nulls_with enabled. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_32.metric_time__day + , subq_32.listing__country_latest + , bookings_fill_nulls_with_0 - bookings_2_weeks_ago AS bookings_growth_2_weeks_fill_nulls_with_0 +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_13.metric_time__day, subq_31.metric_time__day) AS metric_time__day + , COALESCE(subq_13.listing__country_latest, subq_31.listing__country_latest) AS listing__country_latest + , COALESCE(MAX(subq_13.bookings_fill_nulls_with_0), 0) AS bookings_fill_nulls_with_0 + , COALESCE(MAX(subq_31.bookings_2_weeks_ago), 0) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_12.metric_time__day + , subq_12.listing__country_latest + , COALESCE(subq_12.bookings, 0) AS bookings_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_11.metric_time__day AS metric_time__day + , subq_8.listing__country_latest AS listing__country_latest + , subq_8.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_10.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_9.ds__day AS metric_time__day + , subq_9.ds__week + , subq_9.ds__month + , subq_9.ds__quarter + , subq_9.ds__year + , subq_9.ds__extract_year + , subq_9.ds__extract_quarter + , subq_9.ds__extract_month + , subq_9.ds__extract_day + , subq_9.ds__extract_dow + , subq_9.ds__extract_doy + , subq_9.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , subq_7.listing__country_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.listing__country_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + , subq_7.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + subq_11.metric_time__day = subq_8.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_30.metric_time__day + , subq_30.listing__country_latest + , COALESCE(subq_30.bookings, 0) AS bookings_2_weeks_ago + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_29.metric_time__day AS metric_time__day + , subq_26.listing__country_latest AS listing__country_latest + , subq_26.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_28.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_27.ds__day AS metric_time__day + , subq_27.ds__week + , subq_27.ds__month + , subq_27.ds__quarter + , subq_27.ds__year + , subq_27.ds__extract_year + , subq_27.ds__extract_quarter + , subq_27.ds__extract_month + , subq_27.ds__extract_day + , subq_27.ds__extract_dow + , subq_27.ds__extract_doy + , subq_27.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_29 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_25.metric_time__day + , subq_25.listing__country_latest + , SUM(subq_25.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + SELECT + subq_24.metric_time__day + , subq_24.listing__country_latest + , subq_24.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_23.ds__day + , subq_23.ds__week + , subq_23.ds__month + , subq_23.ds__quarter + , subq_23.ds__year + , subq_23.ds__extract_year + , subq_23.ds__extract_quarter + , subq_23.ds__extract_month + , subq_23.ds__extract_day + , subq_23.ds__extract_dow + , subq_23.ds__extract_doy + , subq_23.ds_partitioned__day + , subq_23.ds_partitioned__week + , subq_23.ds_partitioned__month + , subq_23.ds_partitioned__quarter + , subq_23.ds_partitioned__year + , subq_23.ds_partitioned__extract_year + , subq_23.ds_partitioned__extract_quarter + , subq_23.ds_partitioned__extract_month + , subq_23.ds_partitioned__extract_day + , subq_23.ds_partitioned__extract_dow + , subq_23.ds_partitioned__extract_doy + , subq_23.paid_at__day + , subq_23.paid_at__week + , subq_23.paid_at__month + , subq_23.paid_at__quarter + , subq_23.paid_at__year + , subq_23.paid_at__extract_year + , subq_23.paid_at__extract_quarter + , subq_23.paid_at__extract_month + , subq_23.paid_at__extract_day + , subq_23.paid_at__extract_dow + , subq_23.paid_at__extract_doy + , subq_23.booking__ds__day + , subq_23.booking__ds__week + , subq_23.booking__ds__month + , subq_23.booking__ds__quarter + , subq_23.booking__ds__year + , subq_23.booking__ds__extract_year + , subq_23.booking__ds__extract_quarter + , subq_23.booking__ds__extract_month + , subq_23.booking__ds__extract_day + , subq_23.booking__ds__extract_dow + , subq_23.booking__ds__extract_doy + , subq_23.booking__ds_partitioned__day + , subq_23.booking__ds_partitioned__week + , subq_23.booking__ds_partitioned__month + , subq_23.booking__ds_partitioned__quarter + , subq_23.booking__ds_partitioned__year + , subq_23.booking__ds_partitioned__extract_year + , subq_23.booking__ds_partitioned__extract_quarter + , subq_23.booking__ds_partitioned__extract_month + , subq_23.booking__ds_partitioned__extract_day + , subq_23.booking__ds_partitioned__extract_dow + , subq_23.booking__ds_partitioned__extract_doy + , subq_23.booking__paid_at__day + , subq_23.booking__paid_at__week + , subq_23.booking__paid_at__month + , subq_23.booking__paid_at__quarter + , subq_23.booking__paid_at__year + , subq_23.booking__paid_at__extract_year + , subq_23.booking__paid_at__extract_quarter + , subq_23.booking__paid_at__extract_month + , subq_23.booking__paid_at__extract_day + , subq_23.booking__paid_at__extract_dow + , subq_23.booking__paid_at__extract_doy + , subq_23.metric_time__week + , subq_23.metric_time__month + , subq_23.metric_time__quarter + , subq_23.metric_time__year + , subq_23.metric_time__extract_year + , subq_23.metric_time__extract_quarter + , subq_23.metric_time__extract_month + , subq_23.metric_time__extract_day + , subq_23.metric_time__extract_dow + , subq_23.metric_time__extract_doy + , subq_23.metric_time__day + , subq_23.listing + , subq_23.guest + , subq_23.host + , subq_23.booking__listing + , subq_23.booking__guest + , subq_23.booking__host + , subq_23.is_instant + , subq_23.booking__is_instant + , subq_23.listing__country_latest + , subq_23.bookings + , subq_23.instant_bookings + , subq_23.booking_value + , subq_23.max_booking_value + , subq_23.min_booking_value + , subq_23.bookers + , subq_23.average_booking_value + , subq_23.referred_bookings + , subq_23.median_booking_value + , subq_23.booking_value_p99 + , subq_23.discrete_booking_value_p99 + , subq_23.approximate_continuous_booking_value_p99 + , subq_23.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_22.country_latest AS listing__country_latest + , subq_19.ds__day AS ds__day + , subq_19.ds__week AS ds__week + , subq_19.ds__month AS ds__month + , subq_19.ds__quarter AS ds__quarter + , subq_19.ds__year AS ds__year + , subq_19.ds__extract_year AS ds__extract_year + , subq_19.ds__extract_quarter AS ds__extract_quarter + , subq_19.ds__extract_month AS ds__extract_month + , subq_19.ds__extract_day AS ds__extract_day + , subq_19.ds__extract_dow AS ds__extract_dow + , subq_19.ds__extract_doy AS ds__extract_doy + , subq_19.ds_partitioned__day AS ds_partitioned__day + , subq_19.ds_partitioned__week AS ds_partitioned__week + , subq_19.ds_partitioned__month AS ds_partitioned__month + , subq_19.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_19.ds_partitioned__year AS ds_partitioned__year + , subq_19.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_19.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_19.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_19.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_19.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_19.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_19.paid_at__day AS paid_at__day + , subq_19.paid_at__week AS paid_at__week + , subq_19.paid_at__month AS paid_at__month + , subq_19.paid_at__quarter AS paid_at__quarter + , subq_19.paid_at__year AS paid_at__year + , subq_19.paid_at__extract_year AS paid_at__extract_year + , subq_19.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_19.paid_at__extract_month AS paid_at__extract_month + , subq_19.paid_at__extract_day AS paid_at__extract_day + , subq_19.paid_at__extract_dow AS paid_at__extract_dow + , subq_19.paid_at__extract_doy AS paid_at__extract_doy + , subq_19.booking__ds__day AS booking__ds__day + , subq_19.booking__ds__week AS booking__ds__week + , subq_19.booking__ds__month AS booking__ds__month + , subq_19.booking__ds__quarter AS booking__ds__quarter + , subq_19.booking__ds__year AS booking__ds__year + , subq_19.booking__ds__extract_year AS booking__ds__extract_year + , subq_19.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_19.booking__ds__extract_month AS booking__ds__extract_month + , subq_19.booking__ds__extract_day AS booking__ds__extract_day + , subq_19.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_19.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_19.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_19.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_19.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_19.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_19.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_19.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_19.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_19.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_19.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_19.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_19.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_19.booking__paid_at__day AS booking__paid_at__day + , subq_19.booking__paid_at__week AS booking__paid_at__week + , subq_19.booking__paid_at__month AS booking__paid_at__month + , subq_19.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_19.booking__paid_at__year AS booking__paid_at__year + , subq_19.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_19.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_19.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_19.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_19.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_19.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_19.metric_time__week AS metric_time__week + , subq_19.metric_time__month AS metric_time__month + , subq_19.metric_time__quarter AS metric_time__quarter + , subq_19.metric_time__year AS metric_time__year + , subq_19.metric_time__extract_year AS metric_time__extract_year + , subq_19.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_19.metric_time__extract_month AS metric_time__extract_month + , subq_19.metric_time__extract_day AS metric_time__extract_day + , subq_19.metric_time__extract_dow AS metric_time__extract_dow + , subq_19.metric_time__extract_doy AS metric_time__extract_doy + , subq_19.metric_time__day AS metric_time__day + , subq_19.listing AS listing + , subq_19.guest AS guest + , subq_19.host AS host + , subq_19.booking__listing AS booking__listing + , subq_19.booking__guest AS booking__guest + , subq_19.booking__host AS booking__host + , subq_19.is_instant AS is_instant + , subq_19.booking__is_instant AS booking__is_instant + , subq_19.bookings AS bookings + , subq_19.instant_bookings AS instant_bookings + , subq_19.booking_value AS booking_value + , subq_19.max_booking_value AS max_booking_value + , subq_19.min_booking_value AS min_booking_value + , subq_19.bookers AS bookers + , subq_19.average_booking_value AS average_booking_value + , subq_19.referred_bookings AS referred_bookings + , subq_19.median_booking_value AS median_booking_value + , subq_19.booking_value_p99 AS booking_value_p99 + , subq_19.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_19.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_19.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_15.ds__day AS ds__day + , subq_15.ds__week AS ds__week + , subq_15.ds__month AS ds__month + , subq_15.ds__quarter AS ds__quarter + , subq_15.ds__year AS ds__year + , subq_15.ds__extract_year AS ds__extract_year + , subq_15.ds__extract_quarter AS ds__extract_quarter + , subq_15.ds__extract_month AS ds__extract_month + , subq_15.ds__extract_day AS ds__extract_day + , subq_15.ds__extract_dow AS ds__extract_dow + , subq_15.ds__extract_doy AS ds__extract_doy + , subq_15.ds_partitioned__day AS ds_partitioned__day + , subq_15.ds_partitioned__week AS ds_partitioned__week + , subq_15.ds_partitioned__month AS ds_partitioned__month + , subq_15.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_15.ds_partitioned__year AS ds_partitioned__year + , subq_15.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_15.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_15.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_15.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_15.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_15.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_15.paid_at__day AS paid_at__day + , subq_15.paid_at__week AS paid_at__week + , subq_15.paid_at__month AS paid_at__month + , subq_15.paid_at__quarter AS paid_at__quarter + , subq_15.paid_at__year AS paid_at__year + , subq_15.paid_at__extract_year AS paid_at__extract_year + , subq_15.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_15.paid_at__extract_month AS paid_at__extract_month + , subq_15.paid_at__extract_day AS paid_at__extract_day + , subq_15.paid_at__extract_dow AS paid_at__extract_dow + , subq_15.paid_at__extract_doy AS paid_at__extract_doy + , subq_15.booking__ds__day AS booking__ds__day + , subq_15.booking__ds__week AS booking__ds__week + , subq_15.booking__ds__month AS booking__ds__month + , subq_15.booking__ds__quarter AS booking__ds__quarter + , subq_15.booking__ds__year AS booking__ds__year + , subq_15.booking__ds__extract_year AS booking__ds__extract_year + , subq_15.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_15.booking__ds__extract_month AS booking__ds__extract_month + , subq_15.booking__ds__extract_day AS booking__ds__extract_day + , subq_15.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_15.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_15.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_15.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_15.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_15.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_15.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_15.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_15.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_15.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_15.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_15.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_15.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_15.booking__paid_at__day AS booking__paid_at__day + , subq_15.booking__paid_at__week AS booking__paid_at__week + , subq_15.booking__paid_at__month AS booking__paid_at__month + , subq_15.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_15.booking__paid_at__year AS booking__paid_at__year + , subq_15.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_15.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_15.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_15.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_15.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_15.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_15.metric_time__week AS metric_time__week + , subq_15.metric_time__month AS metric_time__month + , subq_15.metric_time__quarter AS metric_time__quarter + , subq_15.metric_time__year AS metric_time__year + , subq_15.metric_time__extract_year AS metric_time__extract_year + , subq_15.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_15.metric_time__extract_month AS metric_time__extract_month + , subq_15.metric_time__extract_day AS metric_time__extract_day + , subq_15.metric_time__extract_dow AS metric_time__extract_dow + , subq_15.metric_time__extract_doy AS metric_time__extract_doy + , subq_18.metric_time__day AS metric_time__day + , subq_15.listing AS listing + , subq_15.guest AS guest + , subq_15.host AS host + , subq_15.booking__listing AS booking__listing + , subq_15.booking__guest AS booking__guest + , subq_15.booking__host AS booking__host + , subq_15.is_instant AS is_instant + , subq_15.booking__is_instant AS booking__is_instant + , subq_15.bookings AS bookings + , subq_15.instant_bookings AS instant_bookings + , subq_15.booking_value AS booking_value + , subq_15.max_booking_value AS max_booking_value + , subq_15.min_booking_value AS min_booking_value + , subq_15.bookers AS bookers + , subq_15.average_booking_value AS average_booking_value + , subq_15.referred_bookings AS referred_bookings + , subq_15.median_booking_value AS median_booking_value + , subq_15.booking_value_p99 AS booking_value_p99 + , subq_15.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_15.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_15.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_17.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_16.ds__day AS metric_time__day + , subq_16.ds__week + , subq_16.ds__month + , subq_16.ds__quarter + , subq_16.ds__year + , subq_16.ds__extract_year + , subq_16.ds__extract_quarter + , subq_16.ds__extract_month + , subq_16.ds__extract_day + , subq_16.ds__extract_dow + , subq_16.ds__extract_doy + , subq_16.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_14.ds__day + , subq_14.ds__week + , subq_14.ds__month + , subq_14.ds__quarter + , subq_14.ds__year + , subq_14.ds__extract_year + , subq_14.ds__extract_quarter + , subq_14.ds__extract_month + , subq_14.ds__extract_day + , subq_14.ds__extract_dow + , subq_14.ds__extract_doy + , subq_14.ds_partitioned__day + , subq_14.ds_partitioned__week + , subq_14.ds_partitioned__month + , subq_14.ds_partitioned__quarter + , subq_14.ds_partitioned__year + , subq_14.ds_partitioned__extract_year + , subq_14.ds_partitioned__extract_quarter + , subq_14.ds_partitioned__extract_month + , subq_14.ds_partitioned__extract_day + , subq_14.ds_partitioned__extract_dow + , subq_14.ds_partitioned__extract_doy + , subq_14.paid_at__day + , subq_14.paid_at__week + , subq_14.paid_at__month + , subq_14.paid_at__quarter + , subq_14.paid_at__year + , subq_14.paid_at__extract_year + , subq_14.paid_at__extract_quarter + , subq_14.paid_at__extract_month + , subq_14.paid_at__extract_day + , subq_14.paid_at__extract_dow + , subq_14.paid_at__extract_doy + , subq_14.booking__ds__day + , subq_14.booking__ds__week + , subq_14.booking__ds__month + , subq_14.booking__ds__quarter + , subq_14.booking__ds__year + , subq_14.booking__ds__extract_year + , subq_14.booking__ds__extract_quarter + , subq_14.booking__ds__extract_month + , subq_14.booking__ds__extract_day + , subq_14.booking__ds__extract_dow + , subq_14.booking__ds__extract_doy + , subq_14.booking__ds_partitioned__day + , subq_14.booking__ds_partitioned__week + , subq_14.booking__ds_partitioned__month + , subq_14.booking__ds_partitioned__quarter + , subq_14.booking__ds_partitioned__year + , subq_14.booking__ds_partitioned__extract_year + , subq_14.booking__ds_partitioned__extract_quarter + , subq_14.booking__ds_partitioned__extract_month + , subq_14.booking__ds_partitioned__extract_day + , subq_14.booking__ds_partitioned__extract_dow + , subq_14.booking__ds_partitioned__extract_doy + , subq_14.booking__paid_at__day + , subq_14.booking__paid_at__week + , subq_14.booking__paid_at__month + , subq_14.booking__paid_at__quarter + , subq_14.booking__paid_at__year + , subq_14.booking__paid_at__extract_year + , subq_14.booking__paid_at__extract_quarter + , subq_14.booking__paid_at__extract_month + , subq_14.booking__paid_at__extract_day + , subq_14.booking__paid_at__extract_dow + , subq_14.booking__paid_at__extract_doy + , subq_14.ds__day AS metric_time__day + , subq_14.ds__week AS metric_time__week + , subq_14.ds__month AS metric_time__month + , subq_14.ds__quarter AS metric_time__quarter + , subq_14.ds__year AS metric_time__year + , subq_14.ds__extract_year AS metric_time__extract_year + , subq_14.ds__extract_quarter AS metric_time__extract_quarter + , subq_14.ds__extract_month AS metric_time__extract_month + , subq_14.ds__extract_day AS metric_time__extract_day + , subq_14.ds__extract_dow AS metric_time__extract_dow + , subq_14.ds__extract_doy AS metric_time__extract_doy + , subq_14.listing + , subq_14.guest + , subq_14.host + , subq_14.booking__listing + , subq_14.booking__guest + , subq_14.booking__host + , subq_14.is_instant + , subq_14.booking__is_instant + , subq_14.bookings + , subq_14.instant_bookings + , subq_14.booking_value + , subq_14.max_booking_value + , subq_14.min_booking_value + , subq_14.bookers + , subq_14.average_booking_value + , subq_14.referred_bookings + , subq_14.median_booking_value + , subq_14.booking_value_p99 + , subq_14.discrete_booking_value_p99 + , subq_14.approximate_continuous_booking_value_p99 + , subq_14.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + addDays(subq_18.metric_time__day, CAST(-14 AS Integer)) = subq_15.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_21.listing + , subq_21.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_20.ds__day + , subq_20.ds__week + , subq_20.ds__month + , subq_20.ds__quarter + , subq_20.ds__year + , subq_20.ds__extract_year + , subq_20.ds__extract_quarter + , subq_20.ds__extract_month + , subq_20.ds__extract_day + , subq_20.ds__extract_dow + , subq_20.ds__extract_doy + , subq_20.created_at__day + , subq_20.created_at__week + , subq_20.created_at__month + , subq_20.created_at__quarter + , subq_20.created_at__year + , subq_20.created_at__extract_year + , subq_20.created_at__extract_quarter + , subq_20.created_at__extract_month + , subq_20.created_at__extract_day + , subq_20.created_at__extract_dow + , subq_20.created_at__extract_doy + , subq_20.listing__ds__day + , subq_20.listing__ds__week + , subq_20.listing__ds__month + , subq_20.listing__ds__quarter + , subq_20.listing__ds__year + , subq_20.listing__ds__extract_year + , subq_20.listing__ds__extract_quarter + , subq_20.listing__ds__extract_month + , subq_20.listing__ds__extract_day + , subq_20.listing__ds__extract_dow + , subq_20.listing__ds__extract_doy + , subq_20.listing__created_at__day + , subq_20.listing__created_at__week + , subq_20.listing__created_at__month + , subq_20.listing__created_at__quarter + , subq_20.listing__created_at__year + , subq_20.listing__created_at__extract_year + , subq_20.listing__created_at__extract_quarter + , subq_20.listing__created_at__extract_month + , subq_20.listing__created_at__extract_day + , subq_20.listing__created_at__extract_dow + , subq_20.listing__created_at__extract_doy + , subq_20.ds__day AS metric_time__day + , subq_20.ds__week AS metric_time__week + , subq_20.ds__month AS metric_time__month + , subq_20.ds__quarter AS metric_time__quarter + , subq_20.ds__year AS metric_time__year + , subq_20.ds__extract_year AS metric_time__extract_year + , subq_20.ds__extract_quarter AS metric_time__extract_quarter + , subq_20.ds__extract_month AS metric_time__extract_month + , subq_20.ds__extract_day AS metric_time__extract_day + , subq_20.ds__extract_dow AS metric_time__extract_dow + , subq_20.ds__extract_doy AS metric_time__extract_doy + , subq_20.listing + , subq_20.user + , subq_20.listing__user + , subq_20.country_latest + , subq_20.is_lux_latest + , subq_20.capacity_latest + , subq_20.listing__country_latest + , subq_20.listing__is_lux_latest + , subq_20.listing__capacity_latest + , subq_20.listings + , subq_20.largest_listing + , subq_20.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + ON + subq_19.listing = subq_22.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + GROUP BY + subq_25.metric_time__day + , subq_25.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + ON + subq_29.metric_time__day = subq_26.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + ON + ( + subq_13.listing__country_latest = subq_31.listing__country_latest + ) AND ( + subq_13.metric_time__day = subq_31.metric_time__day + ) + GROUP BY + COALESCE(subq_13.metric_time__day, subq_31.metric_time__day) + , COALESCE(subq_13.listing__country_latest, subq_31.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_32 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql new file mode 100644 index 0000000000..9ec32ee662 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql @@ -0,0 +1,172 @@ +test_name: test_fill_nulls_time_spine_metric_predicate_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a metric with a time spine and fill_nulls_with enabled. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, sma_28014_cte AS ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , country AS country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, rss_28018_cte AS ( + -- Read From Time Spine 'mf_time_spine' + SELECT + ds AS ds__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , listing__country_latest AS listing__country_latest + , bookings_fill_nulls_with_0 - bookings_2_weeks_ago AS bookings_growth_2_weeks_fill_nulls_with_0 +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_46.metric_time__day, subq_62.metric_time__day) AS metric_time__day + , COALESCE(subq_46.listing__country_latest, subq_62.listing__country_latest) AS listing__country_latest + , COALESCE(MAX(subq_46.bookings_fill_nulls_with_0), 0) AS bookings_fill_nulls_with_0 + , COALESCE(MAX(subq_62.bookings_2_weeks_ago), 0) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , listing__country_latest + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_41.listing__country_latest AS listing__country_latest + , subq_41.bookings AS bookings + FROM rss_28018_cte rss_28018_cte + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , listing__country_latest + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + sma_28014_cte.country_latest AS listing__country_latest + , sma_28009_cte.metric_time__day AS metric_time__day + , sma_28009_cte.booking__is_instant AS booking__is_instant + , sma_28009_cte.bookings AS bookings + FROM sma_28009_cte sma_28009_cte + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + sma_28009_cte.listing = sma_28014_cte.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_38 + WHERE booking__is_instant + GROUP BY + metric_time__day + , listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_41 + ON + rss_28018_cte.ds__day = subq_41.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_45 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_46 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + metric_time__day + , listing__country_latest + , COALESCE(bookings, 0) AS bookings_2_weeks_ago + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , subq_57.listing__country_latest AS listing__country_latest + , subq_57.bookings AS bookings + FROM rss_28018_cte rss_28018_cte + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , listing__country_latest + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + sma_28014_cte.country_latest AS listing__country_latest + , subq_51.metric_time__day AS metric_time__day + , subq_51.booking__is_instant AS booking__is_instant + , subq_51.bookings AS bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + rss_28018_cte.ds__day AS metric_time__day + , sma_28009_cte.listing AS listing + , sma_28009_cte.booking__is_instant AS booking__is_instant + , sma_28009_cte.bookings AS bookings + FROM rss_28018_cte rss_28018_cte + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(rss_28018_cte.ds__day, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_51 + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + subq_51.listing = sma_28014_cte.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_54 + WHERE booking__is_instant + GROUP BY + metric_time__day + , listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_57 + ON + rss_28018_cte.ds__day = subq_57.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_61 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_62 + ON + ( + subq_46.listing__country_latest = subq_62.listing__country_latest + ) AND ( + subq_46.metric_time__day = subq_62.metric_time__day + ) + GROUP BY + COALESCE(subq_46.metric_time__day, subq_62.metric_time__day) + , COALESCE(subq_46.listing__country_latest, subq_62.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_63 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql new file mode 100644 index 0000000000..3823714fff --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql @@ -0,0 +1,580 @@ +test_name: test_metric_time_filter_with_two_targets +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimization for a simple metric time predicate through a single join. + + This is currently a no-op for the pushdown optimizer. + TODO: support metric time pushdown +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.listing__country_latest + , subq_8.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_7.listing__country_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest'] + SELECT + subq_6.listing__country_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE metric_time__day = '2024-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql new file mode 100644 index 0000000000..8f56b60d94 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_metric_time_filter_with_two_targets +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimization for a simple metric time predicate through a single join. + + This is currently a no-op for the pushdown optimizer. + TODO: support metric time pushdown +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__country_latest'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__country_latest + , SUM(bookings) AS bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.country AS listing__country_latest + , subq_10.metric_time__day AS metric_time__day + , subq_10.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_10.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +WHERE metric_time__day = '2024-01-01' +GROUP BY + listing__country_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql new file mode 100644 index 0000000000..b1a2b88393 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql @@ -0,0 +1,349 @@ +test_name: test_multiple_categorical_dimension_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect predicate pushdown for more than one categorical dimension. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.user__home_state_latest + , subq_7.listings +FROM ( + -- Aggregate Measures + SELECT + subq_6.user__home_state_latest + , SUM(subq_6.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'user__home_state_latest'] + SELECT + subq_5.user__home_state_latest + , subq_5.listings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.created_at__day + , subq_4.created_at__week + , subq_4.created_at__month + , subq_4.created_at__quarter + , subq_4.created_at__year + , subq_4.created_at__extract_year + , subq_4.created_at__extract_quarter + , subq_4.created_at__extract_month + , subq_4.created_at__extract_day + , subq_4.created_at__extract_dow + , subq_4.created_at__extract_doy + , subq_4.listing__ds__day + , subq_4.listing__ds__week + , subq_4.listing__ds__month + , subq_4.listing__ds__quarter + , subq_4.listing__ds__year + , subq_4.listing__ds__extract_year + , subq_4.listing__ds__extract_quarter + , subq_4.listing__ds__extract_month + , subq_4.listing__ds__extract_day + , subq_4.listing__ds__extract_dow + , subq_4.listing__ds__extract_doy + , subq_4.listing__created_at__day + , subq_4.listing__created_at__week + , subq_4.listing__created_at__month + , subq_4.listing__created_at__quarter + , subq_4.listing__created_at__year + , subq_4.listing__created_at__extract_year + , subq_4.listing__created_at__extract_quarter + , subq_4.listing__created_at__extract_month + , subq_4.listing__created_at__extract_day + , subq_4.listing__created_at__extract_dow + , subq_4.listing__created_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing + , subq_4.user + , subq_4.listing__user + , subq_4.country_latest + , subq_4.is_lux_latest + , subq_4.capacity_latest + , subq_4.listing__country_latest + , subq_4.listing__is_lux_latest + , subq_4.listing__capacity_latest + , subq_4.user__home_state_latest + , subq_4.listings + , subq_4.largest_listing + , subq_4.smallest_listing + FROM ( + -- Join Standard Outputs + SELECT + subq_3.home_state_latest AS user__home_state_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.created_at__day AS created_at__day + , subq_1.created_at__week AS created_at__week + , subq_1.created_at__month AS created_at__month + , subq_1.created_at__quarter AS created_at__quarter + , subq_1.created_at__year AS created_at__year + , subq_1.created_at__extract_year AS created_at__extract_year + , subq_1.created_at__extract_quarter AS created_at__extract_quarter + , subq_1.created_at__extract_month AS created_at__extract_month + , subq_1.created_at__extract_day AS created_at__extract_day + , subq_1.created_at__extract_dow AS created_at__extract_dow + , subq_1.created_at__extract_doy AS created_at__extract_doy + , subq_1.listing__ds__day AS listing__ds__day + , subq_1.listing__ds__week AS listing__ds__week + , subq_1.listing__ds__month AS listing__ds__month + , subq_1.listing__ds__quarter AS listing__ds__quarter + , subq_1.listing__ds__year AS listing__ds__year + , subq_1.listing__ds__extract_year AS listing__ds__extract_year + , subq_1.listing__ds__extract_quarter AS listing__ds__extract_quarter + , subq_1.listing__ds__extract_month AS listing__ds__extract_month + , subq_1.listing__ds__extract_day AS listing__ds__extract_day + , subq_1.listing__ds__extract_dow AS listing__ds__extract_dow + , subq_1.listing__ds__extract_doy AS listing__ds__extract_doy + , subq_1.listing__created_at__day AS listing__created_at__day + , subq_1.listing__created_at__week AS listing__created_at__week + , subq_1.listing__created_at__month AS listing__created_at__month + , subq_1.listing__created_at__quarter AS listing__created_at__quarter + , subq_1.listing__created_at__year AS listing__created_at__year + , subq_1.listing__created_at__extract_year AS listing__created_at__extract_year + , subq_1.listing__created_at__extract_quarter AS listing__created_at__extract_quarter + , subq_1.listing__created_at__extract_month AS listing__created_at__extract_month + , subq_1.listing__created_at__extract_day AS listing__created_at__extract_day + , subq_1.listing__created_at__extract_dow AS listing__created_at__extract_dow + , subq_1.listing__created_at__extract_doy AS listing__created_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.user AS user + , subq_1.listing__user AS listing__user + , subq_1.country_latest AS country_latest + , subq_1.is_lux_latest AS is_lux_latest + , subq_1.capacity_latest AS capacity_latest + , subq_1.listing__country_latest AS listing__country_latest + , subq_1.listing__is_lux_latest AS listing__is_lux_latest + , subq_1.listing__capacity_latest AS listing__capacity_latest + , subq_1.listings AS listings + , subq_1.largest_listing AS largest_listing + , subq_1.smallest_listing AS smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['home_state_latest', 'user'] + SELECT + subq_2.user + , subq_2.home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + , users_latest_src_28000.home_state_latest + , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day + , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week + , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month + , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year + , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year + , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , users_latest_src_28000.home_state_latest AS user__home_state_latest + , users_latest_src_28000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.user = subq_3.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + WHERE listing__is_lux_latest OR listing__capacity_latest > 4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql new file mode 100644 index 0000000000..e1b95e4c8b --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql @@ -0,0 +1,41 @@ +test_name: test_multiple_categorical_dimension_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect predicate pushdown for more than one categorical dimension. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listings', 'user__home_state_latest'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + user__home_state_latest + , SUM(listings) AS listings +FROM ( + -- Join Standard Outputs + SELECT + users_latest_src_28000.home_state_latest AS user__home_state_latest + , subq_9.listing__is_lux_latest AS listing__is_lux_latest + , subq_9.listing__capacity_latest AS listing__capacity_latest + , subq_9.listings AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + user_id AS user + , is_lux AS listing__is_lux_latest + , capacity AS listing__capacity_latest + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_users_latest users_latest_src_28000 + ON + subq_9.user = users_latest_src_28000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +WHERE listing__is_lux_latest OR listing__capacity_latest > 4 +GROUP BY + user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql new file mode 100644 index 0000000000..436e52d51a --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql @@ -0,0 +1,1334 @@ +test_name: test_offset_metric_with_query_time_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a query against a derived offset metric. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_24.metric_time__day + , subq_24.listing__country_latest + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_9.metric_time__day, subq_23.metric_time__day) AS metric_time__day + , COALESCE(subq_9.listing__country_latest, subq_23.listing__country_latest) AS listing__country_latest + , MAX(subq_9.bookings) AS bookings + , MAX(subq_23.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.listing__country_latest + , subq_8.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , subq_7.listing__country_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.listing__country_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + , subq_7.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_22.metric_time__day + , subq_22.listing__country_latest + , subq_22.bookings AS bookings_2_weeks_ago + FROM ( + -- Aggregate Measures + SELECT + subq_21.metric_time__day + , subq_21.listing__country_latest + , SUM(subq_21.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + SELECT + subq_20.metric_time__day + , subq_20.listing__country_latest + , subq_20.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_19.ds__day + , subq_19.ds__week + , subq_19.ds__month + , subq_19.ds__quarter + , subq_19.ds__year + , subq_19.ds__extract_year + , subq_19.ds__extract_quarter + , subq_19.ds__extract_month + , subq_19.ds__extract_day + , subq_19.ds__extract_dow + , subq_19.ds__extract_doy + , subq_19.ds_partitioned__day + , subq_19.ds_partitioned__week + , subq_19.ds_partitioned__month + , subq_19.ds_partitioned__quarter + , subq_19.ds_partitioned__year + , subq_19.ds_partitioned__extract_year + , subq_19.ds_partitioned__extract_quarter + , subq_19.ds_partitioned__extract_month + , subq_19.ds_partitioned__extract_day + , subq_19.ds_partitioned__extract_dow + , subq_19.ds_partitioned__extract_doy + , subq_19.paid_at__day + , subq_19.paid_at__week + , subq_19.paid_at__month + , subq_19.paid_at__quarter + , subq_19.paid_at__year + , subq_19.paid_at__extract_year + , subq_19.paid_at__extract_quarter + , subq_19.paid_at__extract_month + , subq_19.paid_at__extract_day + , subq_19.paid_at__extract_dow + , subq_19.paid_at__extract_doy + , subq_19.booking__ds__day + , subq_19.booking__ds__week + , subq_19.booking__ds__month + , subq_19.booking__ds__quarter + , subq_19.booking__ds__year + , subq_19.booking__ds__extract_year + , subq_19.booking__ds__extract_quarter + , subq_19.booking__ds__extract_month + , subq_19.booking__ds__extract_day + , subq_19.booking__ds__extract_dow + , subq_19.booking__ds__extract_doy + , subq_19.booking__ds_partitioned__day + , subq_19.booking__ds_partitioned__week + , subq_19.booking__ds_partitioned__month + , subq_19.booking__ds_partitioned__quarter + , subq_19.booking__ds_partitioned__year + , subq_19.booking__ds_partitioned__extract_year + , subq_19.booking__ds_partitioned__extract_quarter + , subq_19.booking__ds_partitioned__extract_month + , subq_19.booking__ds_partitioned__extract_day + , subq_19.booking__ds_partitioned__extract_dow + , subq_19.booking__ds_partitioned__extract_doy + , subq_19.booking__paid_at__day + , subq_19.booking__paid_at__week + , subq_19.booking__paid_at__month + , subq_19.booking__paid_at__quarter + , subq_19.booking__paid_at__year + , subq_19.booking__paid_at__extract_year + , subq_19.booking__paid_at__extract_quarter + , subq_19.booking__paid_at__extract_month + , subq_19.booking__paid_at__extract_day + , subq_19.booking__paid_at__extract_dow + , subq_19.booking__paid_at__extract_doy + , subq_19.metric_time__week + , subq_19.metric_time__month + , subq_19.metric_time__quarter + , subq_19.metric_time__year + , subq_19.metric_time__extract_year + , subq_19.metric_time__extract_quarter + , subq_19.metric_time__extract_month + , subq_19.metric_time__extract_day + , subq_19.metric_time__extract_dow + , subq_19.metric_time__extract_doy + , subq_19.metric_time__day + , subq_19.listing + , subq_19.guest + , subq_19.host + , subq_19.booking__listing + , subq_19.booking__guest + , subq_19.booking__host + , subq_19.is_instant + , subq_19.booking__is_instant + , subq_19.listing__country_latest + , subq_19.bookings + , subq_19.instant_bookings + , subq_19.booking_value + , subq_19.max_booking_value + , subq_19.min_booking_value + , subq_19.bookers + , subq_19.average_booking_value + , subq_19.referred_bookings + , subq_19.median_booking_value + , subq_19.booking_value_p99 + , subq_19.discrete_booking_value_p99 + , subq_19.approximate_continuous_booking_value_p99 + , subq_19.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_18.country_latest AS listing__country_latest + , subq_15.ds__day AS ds__day + , subq_15.ds__week AS ds__week + , subq_15.ds__month AS ds__month + , subq_15.ds__quarter AS ds__quarter + , subq_15.ds__year AS ds__year + , subq_15.ds__extract_year AS ds__extract_year + , subq_15.ds__extract_quarter AS ds__extract_quarter + , subq_15.ds__extract_month AS ds__extract_month + , subq_15.ds__extract_day AS ds__extract_day + , subq_15.ds__extract_dow AS ds__extract_dow + , subq_15.ds__extract_doy AS ds__extract_doy + , subq_15.ds_partitioned__day AS ds_partitioned__day + , subq_15.ds_partitioned__week AS ds_partitioned__week + , subq_15.ds_partitioned__month AS ds_partitioned__month + , subq_15.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_15.ds_partitioned__year AS ds_partitioned__year + , subq_15.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_15.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_15.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_15.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_15.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_15.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_15.paid_at__day AS paid_at__day + , subq_15.paid_at__week AS paid_at__week + , subq_15.paid_at__month AS paid_at__month + , subq_15.paid_at__quarter AS paid_at__quarter + , subq_15.paid_at__year AS paid_at__year + , subq_15.paid_at__extract_year AS paid_at__extract_year + , subq_15.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_15.paid_at__extract_month AS paid_at__extract_month + , subq_15.paid_at__extract_day AS paid_at__extract_day + , subq_15.paid_at__extract_dow AS paid_at__extract_dow + , subq_15.paid_at__extract_doy AS paid_at__extract_doy + , subq_15.booking__ds__day AS booking__ds__day + , subq_15.booking__ds__week AS booking__ds__week + , subq_15.booking__ds__month AS booking__ds__month + , subq_15.booking__ds__quarter AS booking__ds__quarter + , subq_15.booking__ds__year AS booking__ds__year + , subq_15.booking__ds__extract_year AS booking__ds__extract_year + , subq_15.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_15.booking__ds__extract_month AS booking__ds__extract_month + , subq_15.booking__ds__extract_day AS booking__ds__extract_day + , subq_15.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_15.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_15.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_15.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_15.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_15.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_15.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_15.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_15.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_15.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_15.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_15.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_15.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_15.booking__paid_at__day AS booking__paid_at__day + , subq_15.booking__paid_at__week AS booking__paid_at__week + , subq_15.booking__paid_at__month AS booking__paid_at__month + , subq_15.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_15.booking__paid_at__year AS booking__paid_at__year + , subq_15.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_15.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_15.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_15.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_15.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_15.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_15.metric_time__week AS metric_time__week + , subq_15.metric_time__month AS metric_time__month + , subq_15.metric_time__quarter AS metric_time__quarter + , subq_15.metric_time__year AS metric_time__year + , subq_15.metric_time__extract_year AS metric_time__extract_year + , subq_15.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_15.metric_time__extract_month AS metric_time__extract_month + , subq_15.metric_time__extract_day AS metric_time__extract_day + , subq_15.metric_time__extract_dow AS metric_time__extract_dow + , subq_15.metric_time__extract_doy AS metric_time__extract_doy + , subq_15.metric_time__day AS metric_time__day + , subq_15.listing AS listing + , subq_15.guest AS guest + , subq_15.host AS host + , subq_15.booking__listing AS booking__listing + , subq_15.booking__guest AS booking__guest + , subq_15.booking__host AS booking__host + , subq_15.is_instant AS is_instant + , subq_15.booking__is_instant AS booking__is_instant + , subq_15.bookings AS bookings + , subq_15.instant_bookings AS instant_bookings + , subq_15.booking_value AS booking_value + , subq_15.max_booking_value AS max_booking_value + , subq_15.min_booking_value AS min_booking_value + , subq_15.bookers AS bookers + , subq_15.average_booking_value AS average_booking_value + , subq_15.referred_bookings AS referred_bookings + , subq_15.median_booking_value AS median_booking_value + , subq_15.booking_value_p99 AS booking_value_p99 + , subq_15.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_15.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_15.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_11.ds__day AS ds__day + , subq_11.ds__week AS ds__week + , subq_11.ds__month AS ds__month + , subq_11.ds__quarter AS ds__quarter + , subq_11.ds__year AS ds__year + , subq_11.ds__extract_year AS ds__extract_year + , subq_11.ds__extract_quarter AS ds__extract_quarter + , subq_11.ds__extract_month AS ds__extract_month + , subq_11.ds__extract_day AS ds__extract_day + , subq_11.ds__extract_dow AS ds__extract_dow + , subq_11.ds__extract_doy AS ds__extract_doy + , subq_11.ds_partitioned__day AS ds_partitioned__day + , subq_11.ds_partitioned__week AS ds_partitioned__week + , subq_11.ds_partitioned__month AS ds_partitioned__month + , subq_11.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_11.ds_partitioned__year AS ds_partitioned__year + , subq_11.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_11.paid_at__day AS paid_at__day + , subq_11.paid_at__week AS paid_at__week + , subq_11.paid_at__month AS paid_at__month + , subq_11.paid_at__quarter AS paid_at__quarter + , subq_11.paid_at__year AS paid_at__year + , subq_11.paid_at__extract_year AS paid_at__extract_year + , subq_11.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_11.paid_at__extract_month AS paid_at__extract_month + , subq_11.paid_at__extract_day AS paid_at__extract_day + , subq_11.paid_at__extract_dow AS paid_at__extract_dow + , subq_11.paid_at__extract_doy AS paid_at__extract_doy + , subq_11.booking__ds__day AS booking__ds__day + , subq_11.booking__ds__week AS booking__ds__week + , subq_11.booking__ds__month AS booking__ds__month + , subq_11.booking__ds__quarter AS booking__ds__quarter + , subq_11.booking__ds__year AS booking__ds__year + , subq_11.booking__ds__extract_year AS booking__ds__extract_year + , subq_11.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_11.booking__ds__extract_month AS booking__ds__extract_month + , subq_11.booking__ds__extract_day AS booking__ds__extract_day + , subq_11.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_11.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_11.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_11.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_11.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_11.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_11.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_11.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_11.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_11.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_11.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_11.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_11.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_11.booking__paid_at__day AS booking__paid_at__day + , subq_11.booking__paid_at__week AS booking__paid_at__week + , subq_11.booking__paid_at__month AS booking__paid_at__month + , subq_11.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_11.booking__paid_at__year AS booking__paid_at__year + , subq_11.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_11.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_11.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_11.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_11.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_11.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_11.metric_time__week AS metric_time__week + , subq_11.metric_time__month AS metric_time__month + , subq_11.metric_time__quarter AS metric_time__quarter + , subq_11.metric_time__year AS metric_time__year + , subq_11.metric_time__extract_year AS metric_time__extract_year + , subq_11.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_11.metric_time__extract_month AS metric_time__extract_month + , subq_11.metric_time__extract_day AS metric_time__extract_day + , subq_11.metric_time__extract_dow AS metric_time__extract_dow + , subq_11.metric_time__extract_doy AS metric_time__extract_doy + , subq_14.metric_time__day AS metric_time__day + , subq_11.listing AS listing + , subq_11.guest AS guest + , subq_11.host AS host + , subq_11.booking__listing AS booking__listing + , subq_11.booking__guest AS booking__guest + , subq_11.booking__host AS booking__host + , subq_11.is_instant AS is_instant + , subq_11.booking__is_instant AS booking__is_instant + , subq_11.bookings AS bookings + , subq_11.instant_bookings AS instant_bookings + , subq_11.booking_value AS booking_value + , subq_11.max_booking_value AS max_booking_value + , subq_11.min_booking_value AS min_booking_value + , subq_11.bookers AS bookers + , subq_11.average_booking_value AS average_booking_value + , subq_11.referred_bookings AS referred_bookings + , subq_11.median_booking_value AS median_booking_value + , subq_11.booking_value_p99 AS booking_value_p99 + , subq_11.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_11.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_11.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_13.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_12.ds__day AS metric_time__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + INNER JOIN + ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.paid_at__day + , subq_10.paid_at__week + , subq_10.paid_at__month + , subq_10.paid_at__quarter + , subq_10.paid_at__year + , subq_10.paid_at__extract_year + , subq_10.paid_at__extract_quarter + , subq_10.paid_at__extract_month + , subq_10.paid_at__extract_day + , subq_10.paid_at__extract_dow + , subq_10.paid_at__extract_doy + , subq_10.booking__ds__day + , subq_10.booking__ds__week + , subq_10.booking__ds__month + , subq_10.booking__ds__quarter + , subq_10.booking__ds__year + , subq_10.booking__ds__extract_year + , subq_10.booking__ds__extract_quarter + , subq_10.booking__ds__extract_month + , subq_10.booking__ds__extract_day + , subq_10.booking__ds__extract_dow + , subq_10.booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day + , subq_10.booking__paid_at__week + , subq_10.booking__paid_at__month + , subq_10.booking__paid_at__quarter + , subq_10.booking__paid_at__year + , subq_10.booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.guest + , subq_10.host + , subq_10.booking__listing + , subq_10.booking__guest + , subq_10.booking__host + , subq_10.is_instant + , subq_10.booking__is_instant + , subq_10.bookings + , subq_10.instant_bookings + , subq_10.booking_value + , subq_10.max_booking_value + , subq_10.min_booking_value + , subq_10.bookers + , subq_10.average_booking_value + , subq_10.referred_bookings + , subq_10.median_booking_value + , subq_10.booking_value_p99 + , subq_10.discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + ON + addDays(subq_14.metric_time__day, CAST(-14 AS Integer)) = subq_11.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_17.listing + , subq_17.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_16.ds__day + , subq_16.ds__week + , subq_16.ds__month + , subq_16.ds__quarter + , subq_16.ds__year + , subq_16.ds__extract_year + , subq_16.ds__extract_quarter + , subq_16.ds__extract_month + , subq_16.ds__extract_day + , subq_16.ds__extract_dow + , subq_16.ds__extract_doy + , subq_16.created_at__day + , subq_16.created_at__week + , subq_16.created_at__month + , subq_16.created_at__quarter + , subq_16.created_at__year + , subq_16.created_at__extract_year + , subq_16.created_at__extract_quarter + , subq_16.created_at__extract_month + , subq_16.created_at__extract_day + , subq_16.created_at__extract_dow + , subq_16.created_at__extract_doy + , subq_16.listing__ds__day + , subq_16.listing__ds__week + , subq_16.listing__ds__month + , subq_16.listing__ds__quarter + , subq_16.listing__ds__year + , subq_16.listing__ds__extract_year + , subq_16.listing__ds__extract_quarter + , subq_16.listing__ds__extract_month + , subq_16.listing__ds__extract_day + , subq_16.listing__ds__extract_dow + , subq_16.listing__ds__extract_doy + , subq_16.listing__created_at__day + , subq_16.listing__created_at__week + , subq_16.listing__created_at__month + , subq_16.listing__created_at__quarter + , subq_16.listing__created_at__year + , subq_16.listing__created_at__extract_year + , subq_16.listing__created_at__extract_quarter + , subq_16.listing__created_at__extract_month + , subq_16.listing__created_at__extract_day + , subq_16.listing__created_at__extract_dow + , subq_16.listing__created_at__extract_doy + , subq_16.ds__day AS metric_time__day + , subq_16.ds__week AS metric_time__week + , subq_16.ds__month AS metric_time__month + , subq_16.ds__quarter AS metric_time__quarter + , subq_16.ds__year AS metric_time__year + , subq_16.ds__extract_year AS metric_time__extract_year + , subq_16.ds__extract_quarter AS metric_time__extract_quarter + , subq_16.ds__extract_month AS metric_time__extract_month + , subq_16.ds__extract_day AS metric_time__extract_day + , subq_16.ds__extract_dow AS metric_time__extract_dow + , subq_16.ds__extract_doy AS metric_time__extract_doy + , subq_16.listing + , subq_16.user + , subq_16.listing__user + , subq_16.country_latest + , subq_16.is_lux_latest + , subq_16.capacity_latest + , subq_16.listing__country_latest + , subq_16.listing__is_lux_latest + , subq_16.listing__capacity_latest + , subq_16.listings + , subq_16.largest_listing + , subq_16.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + ON + subq_15.listing = subq_18.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + GROUP BY + subq_21.metric_time__day + , subq_21.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + ON + ( + subq_9.listing__country_latest = subq_23.listing__country_latest + ) AND ( + subq_9.metric_time__day = subq_23.metric_time__day + ) + GROUP BY + COALESCE(subq_9.metric_time__day, subq_23.metric_time__day) + , COALESCE(subq_9.listing__country_latest, subq_23.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_24 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql new file mode 100644 index 0000000000..988bec799c --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql @@ -0,0 +1,126 @@ +test_name: test_offset_metric_with_query_time_filters +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests pushdown optimizer behavior for a query against a derived offset metric. + + TODO: support metric time filters +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, sma_28014_cte AS ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , country AS country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , listing__country_latest AS listing__country_latest + , bookings - bookings_2_weeks_ago AS bookings_growth_2_weeks +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_34.metric_time__day, subq_46.metric_time__day) AS metric_time__day + , COALESCE(subq_34.listing__country_latest, subq_46.listing__country_latest) AS listing__country_latest + , MAX(subq_34.bookings) AS bookings + , MAX(subq_46.bookings_2_weeks_ago) AS bookings_2_weeks_ago + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , listing__country_latest + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + sma_28014_cte.country_latest AS listing__country_latest + , sma_28009_cte.metric_time__day AS metric_time__day + , sma_28009_cte.booking__is_instant AS booking__is_instant + , sma_28009_cte.bookings AS bookings + FROM sma_28009_cte sma_28009_cte + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + sma_28009_cte.listing = sma_28014_cte.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + WHERE booking__is_instant + GROUP BY + metric_time__day + , listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + FULL OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , listing__country_latest + , SUM(bookings) AS bookings_2_weeks_ago + FROM ( + -- Join Standard Outputs + SELECT + sma_28014_cte.country_latest AS listing__country_latest + , subq_39.metric_time__day AS metric_time__day + , subq_39.booking__is_instant AS booking__is_instant + , subq_39.bookings AS bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , sma_28009_cte.listing AS listing + , sma_28009_cte.booking__is_instant AS booking__is_instant + , sma_28009_cte.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + INNER JOIN + sma_28009_cte sma_28009_cte + ON + addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_39 + LEFT OUTER JOIN + sma_28014_cte sma_28014_cte + ON + subq_39.listing = sma_28014_cte.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_42 + WHERE booking__is_instant + GROUP BY + metric_time__day + , listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_46 + ON + ( + subq_34.listing__country_latest = subq_46.listing__country_latest + ) AND ( + subq_34.metric_time__day = subq_46.metric_time__day + ) + GROUP BY + COALESCE(subq_34.metric_time__day, subq_46.metric_time__day) + , COALESCE(subq_34.listing__country_latest, subq_46.listing__country_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_47 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql new file mode 100644 index 0000000000..5db981e58c --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql @@ -0,0 +1,2041 @@ +test_name: test_saved_query_with_metric_joins_and_filter +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we join to a time spine and query the filter input. + + This should produce a SQL query that applies the filter outside of the time spine join. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_9.listing__capacity_latest, subq_19.listing__capacity_latest, subq_41.listing__capacity_latest) AS listing__capacity_latest + , MAX(subq_9.bookings) AS bookings + , MAX(subq_19.views) AS views + , MAX(subq_41.bookings_per_view) AS bookings_per_view +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.listing__capacity_latest + , subq_8.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_7.listing__capacity_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity_latest'] + SELECT + subq_6.listing__capacity_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__is_lux_latest + , subq_5.listing__capacity_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.is_lux_latest AS listing__is_lux_latest + , subq_4.capacity_latest AS listing__capacity_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.is_lux_latest + , subq_3.capacity_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_18.listing__capacity_latest + , subq_18.views + FROM ( + -- Aggregate Measures + SELECT + subq_17.listing__capacity_latest + , SUM(subq_17.views) AS views + FROM ( + -- Pass Only Elements: ['views', 'listing__capacity_latest'] + SELECT + subq_16.listing__capacity_latest + , subq_16.views + FROM ( + -- Constrain Output with WHERE + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.ds_partitioned__day + , subq_15.ds_partitioned__week + , subq_15.ds_partitioned__month + , subq_15.ds_partitioned__quarter + , subq_15.ds_partitioned__year + , subq_15.ds_partitioned__extract_year + , subq_15.ds_partitioned__extract_quarter + , subq_15.ds_partitioned__extract_month + , subq_15.ds_partitioned__extract_day + , subq_15.ds_partitioned__extract_dow + , subq_15.ds_partitioned__extract_doy + , subq_15.view__ds__day + , subq_15.view__ds__week + , subq_15.view__ds__month + , subq_15.view__ds__quarter + , subq_15.view__ds__year + , subq_15.view__ds__extract_year + , subq_15.view__ds__extract_quarter + , subq_15.view__ds__extract_month + , subq_15.view__ds__extract_day + , subq_15.view__ds__extract_dow + , subq_15.view__ds__extract_doy + , subq_15.view__ds_partitioned__day + , subq_15.view__ds_partitioned__week + , subq_15.view__ds_partitioned__month + , subq_15.view__ds_partitioned__quarter + , subq_15.view__ds_partitioned__year + , subq_15.view__ds_partitioned__extract_year + , subq_15.view__ds_partitioned__extract_quarter + , subq_15.view__ds_partitioned__extract_month + , subq_15.view__ds_partitioned__extract_day + , subq_15.view__ds_partitioned__extract_dow + , subq_15.view__ds_partitioned__extract_doy + , subq_15.metric_time__day + , subq_15.metric_time__week + , subq_15.metric_time__month + , subq_15.metric_time__quarter + , subq_15.metric_time__year + , subq_15.metric_time__extract_year + , subq_15.metric_time__extract_quarter + , subq_15.metric_time__extract_month + , subq_15.metric_time__extract_day + , subq_15.metric_time__extract_dow + , subq_15.metric_time__extract_doy + , subq_15.listing + , subq_15.user + , subq_15.view__listing + , subq_15.view__user + , subq_15.listing__is_lux_latest + , subq_15.listing__capacity_latest + , subq_15.views + FROM ( + -- Join Standard Outputs + SELECT + subq_14.is_lux_latest AS listing__is_lux_latest + , subq_14.capacity_latest AS listing__capacity_latest + , subq_11.ds__day AS ds__day + , subq_11.ds__week AS ds__week + , subq_11.ds__month AS ds__month + , subq_11.ds__quarter AS ds__quarter + , subq_11.ds__year AS ds__year + , subq_11.ds__extract_year AS ds__extract_year + , subq_11.ds__extract_quarter AS ds__extract_quarter + , subq_11.ds__extract_month AS ds__extract_month + , subq_11.ds__extract_day AS ds__extract_day + , subq_11.ds__extract_dow AS ds__extract_dow + , subq_11.ds__extract_doy AS ds__extract_doy + , subq_11.ds_partitioned__day AS ds_partitioned__day + , subq_11.ds_partitioned__week AS ds_partitioned__week + , subq_11.ds_partitioned__month AS ds_partitioned__month + , subq_11.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_11.ds_partitioned__year AS ds_partitioned__year + , subq_11.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_11.view__ds__day AS view__ds__day + , subq_11.view__ds__week AS view__ds__week + , subq_11.view__ds__month AS view__ds__month + , subq_11.view__ds__quarter AS view__ds__quarter + , subq_11.view__ds__year AS view__ds__year + , subq_11.view__ds__extract_year AS view__ds__extract_year + , subq_11.view__ds__extract_quarter AS view__ds__extract_quarter + , subq_11.view__ds__extract_month AS view__ds__extract_month + , subq_11.view__ds__extract_day AS view__ds__extract_day + , subq_11.view__ds__extract_dow AS view__ds__extract_dow + , subq_11.view__ds__extract_doy AS view__ds__extract_doy + , subq_11.view__ds_partitioned__day AS view__ds_partitioned__day + , subq_11.view__ds_partitioned__week AS view__ds_partitioned__week + , subq_11.view__ds_partitioned__month AS view__ds_partitioned__month + , subq_11.view__ds_partitioned__quarter AS view__ds_partitioned__quarter + , subq_11.view__ds_partitioned__year AS view__ds_partitioned__year + , subq_11.view__ds_partitioned__extract_year AS view__ds_partitioned__extract_year + , subq_11.view__ds_partitioned__extract_quarter AS view__ds_partitioned__extract_quarter + , subq_11.view__ds_partitioned__extract_month AS view__ds_partitioned__extract_month + , subq_11.view__ds_partitioned__extract_day AS view__ds_partitioned__extract_day + , subq_11.view__ds_partitioned__extract_dow AS view__ds_partitioned__extract_dow + , subq_11.view__ds_partitioned__extract_doy AS view__ds_partitioned__extract_doy + , subq_11.metric_time__day AS metric_time__day + , subq_11.metric_time__week AS metric_time__week + , subq_11.metric_time__month AS metric_time__month + , subq_11.metric_time__quarter AS metric_time__quarter + , subq_11.metric_time__year AS metric_time__year + , subq_11.metric_time__extract_year AS metric_time__extract_year + , subq_11.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_11.metric_time__extract_month AS metric_time__extract_month + , subq_11.metric_time__extract_day AS metric_time__extract_day + , subq_11.metric_time__extract_dow AS metric_time__extract_dow + , subq_11.metric_time__extract_doy AS metric_time__extract_doy + , subq_11.listing AS listing + , subq_11.user AS user + , subq_11.view__listing AS view__listing + , subq_11.view__user AS view__user + , subq_11.views AS views + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.view__ds__day + , subq_10.view__ds__week + , subq_10.view__ds__month + , subq_10.view__ds__quarter + , subq_10.view__ds__year + , subq_10.view__ds__extract_year + , subq_10.view__ds__extract_quarter + , subq_10.view__ds__extract_month + , subq_10.view__ds__extract_day + , subq_10.view__ds__extract_dow + , subq_10.view__ds__extract_doy + , subq_10.view__ds_partitioned__day + , subq_10.view__ds_partitioned__week + , subq_10.view__ds_partitioned__month + , subq_10.view__ds_partitioned__quarter + , subq_10.view__ds_partitioned__year + , subq_10.view__ds_partitioned__extract_year + , subq_10.view__ds_partitioned__extract_quarter + , subq_10.view__ds_partitioned__extract_month + , subq_10.view__ds_partitioned__extract_day + , subq_10.view__ds_partitioned__extract_dow + , subq_10.view__ds_partitioned__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.user + , subq_10.view__listing + , subq_10.view__user + , subq_10.views + FROM ( + -- Read Elements From Semantic Model 'views_source' + SELECT + 1 AS views + , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , views_source_src_28000.listing_id AS listing + , views_source_src_28000.user_id AS user + , views_source_src_28000.listing_id AS view__listing + , views_source_src_28000.user_id AS view__user + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] + SELECT + subq_13.listing + , subq_13.is_lux_latest + , subq_13.capacity_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.created_at__day + , subq_12.created_at__week + , subq_12.created_at__month + , subq_12.created_at__quarter + , subq_12.created_at__year + , subq_12.created_at__extract_year + , subq_12.created_at__extract_quarter + , subq_12.created_at__extract_month + , subq_12.created_at__extract_day + , subq_12.created_at__extract_dow + , subq_12.created_at__extract_doy + , subq_12.listing__ds__day + , subq_12.listing__ds__week + , subq_12.listing__ds__month + , subq_12.listing__ds__quarter + , subq_12.listing__ds__year + , subq_12.listing__ds__extract_year + , subq_12.listing__ds__extract_quarter + , subq_12.listing__ds__extract_month + , subq_12.listing__ds__extract_day + , subq_12.listing__ds__extract_dow + , subq_12.listing__ds__extract_doy + , subq_12.listing__created_at__day + , subq_12.listing__created_at__week + , subq_12.listing__created_at__month + , subq_12.listing__created_at__quarter + , subq_12.listing__created_at__year + , subq_12.listing__created_at__extract_year + , subq_12.listing__created_at__extract_quarter + , subq_12.listing__created_at__extract_month + , subq_12.listing__created_at__extract_day + , subq_12.listing__created_at__extract_dow + , subq_12.listing__created_at__extract_doy + , subq_12.ds__day AS metric_time__day + , subq_12.ds__week AS metric_time__week + , subq_12.ds__month AS metric_time__month + , subq_12.ds__quarter AS metric_time__quarter + , subq_12.ds__year AS metric_time__year + , subq_12.ds__extract_year AS metric_time__extract_year + , subq_12.ds__extract_quarter AS metric_time__extract_quarter + , subq_12.ds__extract_month AS metric_time__extract_month + , subq_12.ds__extract_day AS metric_time__extract_day + , subq_12.ds__extract_dow AS metric_time__extract_dow + , subq_12.ds__extract_doy AS metric_time__extract_doy + , subq_12.listing + , subq_12.user + , subq_12.listing__user + , subq_12.country_latest + , subq_12.is_lux_latest + , subq_12.capacity_latest + , subq_12.listing__country_latest + , subq_12.listing__is_lux_latest + , subq_12.listing__capacity_latest + , subq_12.listings + , subq_12.largest_listing + , subq_12.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + subq_11.listing = subq_14.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + GROUP BY + subq_17.listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +ON + subq_9.listing__capacity_latest = subq_19.listing__capacity_latest +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_40.listing__capacity_latest + , CAST(subq_40.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_40.views, 0) AS DOUBLE PRECISION) AS bookings_per_view + FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_29.listing__capacity_latest, subq_39.listing__capacity_latest) AS listing__capacity_latest + , MAX(subq_29.bookings) AS bookings + , MAX(subq_39.views) AS views + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_28.listing__capacity_latest + , subq_28.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_27.listing__capacity_latest + , SUM(subq_27.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity_latest'] + SELECT + subq_26.listing__capacity_latest + , subq_26.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_25.ds__day + , subq_25.ds__week + , subq_25.ds__month + , subq_25.ds__quarter + , subq_25.ds__year + , subq_25.ds__extract_year + , subq_25.ds__extract_quarter + , subq_25.ds__extract_month + , subq_25.ds__extract_day + , subq_25.ds__extract_dow + , subq_25.ds__extract_doy + , subq_25.ds_partitioned__day + , subq_25.ds_partitioned__week + , subq_25.ds_partitioned__month + , subq_25.ds_partitioned__quarter + , subq_25.ds_partitioned__year + , subq_25.ds_partitioned__extract_year + , subq_25.ds_partitioned__extract_quarter + , subq_25.ds_partitioned__extract_month + , subq_25.ds_partitioned__extract_day + , subq_25.ds_partitioned__extract_dow + , subq_25.ds_partitioned__extract_doy + , subq_25.paid_at__day + , subq_25.paid_at__week + , subq_25.paid_at__month + , subq_25.paid_at__quarter + , subq_25.paid_at__year + , subq_25.paid_at__extract_year + , subq_25.paid_at__extract_quarter + , subq_25.paid_at__extract_month + , subq_25.paid_at__extract_day + , subq_25.paid_at__extract_dow + , subq_25.paid_at__extract_doy + , subq_25.booking__ds__day + , subq_25.booking__ds__week + , subq_25.booking__ds__month + , subq_25.booking__ds__quarter + , subq_25.booking__ds__year + , subq_25.booking__ds__extract_year + , subq_25.booking__ds__extract_quarter + , subq_25.booking__ds__extract_month + , subq_25.booking__ds__extract_day + , subq_25.booking__ds__extract_dow + , subq_25.booking__ds__extract_doy + , subq_25.booking__ds_partitioned__day + , subq_25.booking__ds_partitioned__week + , subq_25.booking__ds_partitioned__month + , subq_25.booking__ds_partitioned__quarter + , subq_25.booking__ds_partitioned__year + , subq_25.booking__ds_partitioned__extract_year + , subq_25.booking__ds_partitioned__extract_quarter + , subq_25.booking__ds_partitioned__extract_month + , subq_25.booking__ds_partitioned__extract_day + , subq_25.booking__ds_partitioned__extract_dow + , subq_25.booking__ds_partitioned__extract_doy + , subq_25.booking__paid_at__day + , subq_25.booking__paid_at__week + , subq_25.booking__paid_at__month + , subq_25.booking__paid_at__quarter + , subq_25.booking__paid_at__year + , subq_25.booking__paid_at__extract_year + , subq_25.booking__paid_at__extract_quarter + , subq_25.booking__paid_at__extract_month + , subq_25.booking__paid_at__extract_day + , subq_25.booking__paid_at__extract_dow + , subq_25.booking__paid_at__extract_doy + , subq_25.metric_time__day + , subq_25.metric_time__week + , subq_25.metric_time__month + , subq_25.metric_time__quarter + , subq_25.metric_time__year + , subq_25.metric_time__extract_year + , subq_25.metric_time__extract_quarter + , subq_25.metric_time__extract_month + , subq_25.metric_time__extract_day + , subq_25.metric_time__extract_dow + , subq_25.metric_time__extract_doy + , subq_25.listing + , subq_25.guest + , subq_25.host + , subq_25.booking__listing + , subq_25.booking__guest + , subq_25.booking__host + , subq_25.is_instant + , subq_25.booking__is_instant + , subq_25.listing__is_lux_latest + , subq_25.listing__capacity_latest + , subq_25.bookings + , subq_25.instant_bookings + , subq_25.booking_value + , subq_25.max_booking_value + , subq_25.min_booking_value + , subq_25.bookers + , subq_25.average_booking_value + , subq_25.referred_bookings + , subq_25.median_booking_value + , subq_25.booking_value_p99 + , subq_25.discrete_booking_value_p99 + , subq_25.approximate_continuous_booking_value_p99 + , subq_25.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_24.is_lux_latest AS listing__is_lux_latest + , subq_24.capacity_latest AS listing__capacity_latest + , subq_21.ds__day AS ds__day + , subq_21.ds__week AS ds__week + , subq_21.ds__month AS ds__month + , subq_21.ds__quarter AS ds__quarter + , subq_21.ds__year AS ds__year + , subq_21.ds__extract_year AS ds__extract_year + , subq_21.ds__extract_quarter AS ds__extract_quarter + , subq_21.ds__extract_month AS ds__extract_month + , subq_21.ds__extract_day AS ds__extract_day + , subq_21.ds__extract_dow AS ds__extract_dow + , subq_21.ds__extract_doy AS ds__extract_doy + , subq_21.ds_partitioned__day AS ds_partitioned__day + , subq_21.ds_partitioned__week AS ds_partitioned__week + , subq_21.ds_partitioned__month AS ds_partitioned__month + , subq_21.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_21.ds_partitioned__year AS ds_partitioned__year + , subq_21.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_21.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_21.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_21.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_21.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_21.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_21.paid_at__day AS paid_at__day + , subq_21.paid_at__week AS paid_at__week + , subq_21.paid_at__month AS paid_at__month + , subq_21.paid_at__quarter AS paid_at__quarter + , subq_21.paid_at__year AS paid_at__year + , subq_21.paid_at__extract_year AS paid_at__extract_year + , subq_21.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_21.paid_at__extract_month AS paid_at__extract_month + , subq_21.paid_at__extract_day AS paid_at__extract_day + , subq_21.paid_at__extract_dow AS paid_at__extract_dow + , subq_21.paid_at__extract_doy AS paid_at__extract_doy + , subq_21.booking__ds__day AS booking__ds__day + , subq_21.booking__ds__week AS booking__ds__week + , subq_21.booking__ds__month AS booking__ds__month + , subq_21.booking__ds__quarter AS booking__ds__quarter + , subq_21.booking__ds__year AS booking__ds__year + , subq_21.booking__ds__extract_year AS booking__ds__extract_year + , subq_21.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_21.booking__ds__extract_month AS booking__ds__extract_month + , subq_21.booking__ds__extract_day AS booking__ds__extract_day + , subq_21.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_21.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_21.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_21.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_21.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_21.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_21.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_21.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_21.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_21.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_21.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_21.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_21.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_21.booking__paid_at__day AS booking__paid_at__day + , subq_21.booking__paid_at__week AS booking__paid_at__week + , subq_21.booking__paid_at__month AS booking__paid_at__month + , subq_21.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_21.booking__paid_at__year AS booking__paid_at__year + , subq_21.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_21.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_21.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_21.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_21.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_21.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_21.metric_time__day AS metric_time__day + , subq_21.metric_time__week AS metric_time__week + , subq_21.metric_time__month AS metric_time__month + , subq_21.metric_time__quarter AS metric_time__quarter + , subq_21.metric_time__year AS metric_time__year + , subq_21.metric_time__extract_year AS metric_time__extract_year + , subq_21.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_21.metric_time__extract_month AS metric_time__extract_month + , subq_21.metric_time__extract_day AS metric_time__extract_day + , subq_21.metric_time__extract_dow AS metric_time__extract_dow + , subq_21.metric_time__extract_doy AS metric_time__extract_doy + , subq_21.listing AS listing + , subq_21.guest AS guest + , subq_21.host AS host + , subq_21.booking__listing AS booking__listing + , subq_21.booking__guest AS booking__guest + , subq_21.booking__host AS booking__host + , subq_21.is_instant AS is_instant + , subq_21.booking__is_instant AS booking__is_instant + , subq_21.bookings AS bookings + , subq_21.instant_bookings AS instant_bookings + , subq_21.booking_value AS booking_value + , subq_21.max_booking_value AS max_booking_value + , subq_21.min_booking_value AS min_booking_value + , subq_21.bookers AS bookers + , subq_21.average_booking_value AS average_booking_value + , subq_21.referred_bookings AS referred_bookings + , subq_21.median_booking_value AS median_booking_value + , subq_21.booking_value_p99 AS booking_value_p99 + , subq_21.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_21.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_21.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_20.ds__day + , subq_20.ds__week + , subq_20.ds__month + , subq_20.ds__quarter + , subq_20.ds__year + , subq_20.ds__extract_year + , subq_20.ds__extract_quarter + , subq_20.ds__extract_month + , subq_20.ds__extract_day + , subq_20.ds__extract_dow + , subq_20.ds__extract_doy + , subq_20.ds_partitioned__day + , subq_20.ds_partitioned__week + , subq_20.ds_partitioned__month + , subq_20.ds_partitioned__quarter + , subq_20.ds_partitioned__year + , subq_20.ds_partitioned__extract_year + , subq_20.ds_partitioned__extract_quarter + , subq_20.ds_partitioned__extract_month + , subq_20.ds_partitioned__extract_day + , subq_20.ds_partitioned__extract_dow + , subq_20.ds_partitioned__extract_doy + , subq_20.paid_at__day + , subq_20.paid_at__week + , subq_20.paid_at__month + , subq_20.paid_at__quarter + , subq_20.paid_at__year + , subq_20.paid_at__extract_year + , subq_20.paid_at__extract_quarter + , subq_20.paid_at__extract_month + , subq_20.paid_at__extract_day + , subq_20.paid_at__extract_dow + , subq_20.paid_at__extract_doy + , subq_20.booking__ds__day + , subq_20.booking__ds__week + , subq_20.booking__ds__month + , subq_20.booking__ds__quarter + , subq_20.booking__ds__year + , subq_20.booking__ds__extract_year + , subq_20.booking__ds__extract_quarter + , subq_20.booking__ds__extract_month + , subq_20.booking__ds__extract_day + , subq_20.booking__ds__extract_dow + , subq_20.booking__ds__extract_doy + , subq_20.booking__ds_partitioned__day + , subq_20.booking__ds_partitioned__week + , subq_20.booking__ds_partitioned__month + , subq_20.booking__ds_partitioned__quarter + , subq_20.booking__ds_partitioned__year + , subq_20.booking__ds_partitioned__extract_year + , subq_20.booking__ds_partitioned__extract_quarter + , subq_20.booking__ds_partitioned__extract_month + , subq_20.booking__ds_partitioned__extract_day + , subq_20.booking__ds_partitioned__extract_dow + , subq_20.booking__ds_partitioned__extract_doy + , subq_20.booking__paid_at__day + , subq_20.booking__paid_at__week + , subq_20.booking__paid_at__month + , subq_20.booking__paid_at__quarter + , subq_20.booking__paid_at__year + , subq_20.booking__paid_at__extract_year + , subq_20.booking__paid_at__extract_quarter + , subq_20.booking__paid_at__extract_month + , subq_20.booking__paid_at__extract_day + , subq_20.booking__paid_at__extract_dow + , subq_20.booking__paid_at__extract_doy + , subq_20.ds__day AS metric_time__day + , subq_20.ds__week AS metric_time__week + , subq_20.ds__month AS metric_time__month + , subq_20.ds__quarter AS metric_time__quarter + , subq_20.ds__year AS metric_time__year + , subq_20.ds__extract_year AS metric_time__extract_year + , subq_20.ds__extract_quarter AS metric_time__extract_quarter + , subq_20.ds__extract_month AS metric_time__extract_month + , subq_20.ds__extract_day AS metric_time__extract_day + , subq_20.ds__extract_dow AS metric_time__extract_dow + , subq_20.ds__extract_doy AS metric_time__extract_doy + , subq_20.listing + , subq_20.guest + , subq_20.host + , subq_20.booking__listing + , subq_20.booking__guest + , subq_20.booking__host + , subq_20.is_instant + , subq_20.booking__is_instant + , subq_20.bookings + , subq_20.instant_bookings + , subq_20.booking_value + , subq_20.max_booking_value + , subq_20.min_booking_value + , subq_20.bookers + , subq_20.average_booking_value + , subq_20.referred_bookings + , subq_20.median_booking_value + , subq_20.booking_value_p99 + , subq_20.discrete_booking_value_p99 + , subq_20.approximate_continuous_booking_value_p99 + , subq_20.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] + SELECT + subq_23.listing + , subq_23.is_lux_latest + , subq_23.capacity_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_22.ds__day + , subq_22.ds__week + , subq_22.ds__month + , subq_22.ds__quarter + , subq_22.ds__year + , subq_22.ds__extract_year + , subq_22.ds__extract_quarter + , subq_22.ds__extract_month + , subq_22.ds__extract_day + , subq_22.ds__extract_dow + , subq_22.ds__extract_doy + , subq_22.created_at__day + , subq_22.created_at__week + , subq_22.created_at__month + , subq_22.created_at__quarter + , subq_22.created_at__year + , subq_22.created_at__extract_year + , subq_22.created_at__extract_quarter + , subq_22.created_at__extract_month + , subq_22.created_at__extract_day + , subq_22.created_at__extract_dow + , subq_22.created_at__extract_doy + , subq_22.listing__ds__day + , subq_22.listing__ds__week + , subq_22.listing__ds__month + , subq_22.listing__ds__quarter + , subq_22.listing__ds__year + , subq_22.listing__ds__extract_year + , subq_22.listing__ds__extract_quarter + , subq_22.listing__ds__extract_month + , subq_22.listing__ds__extract_day + , subq_22.listing__ds__extract_dow + , subq_22.listing__ds__extract_doy + , subq_22.listing__created_at__day + , subq_22.listing__created_at__week + , subq_22.listing__created_at__month + , subq_22.listing__created_at__quarter + , subq_22.listing__created_at__year + , subq_22.listing__created_at__extract_year + , subq_22.listing__created_at__extract_quarter + , subq_22.listing__created_at__extract_month + , subq_22.listing__created_at__extract_day + , subq_22.listing__created_at__extract_dow + , subq_22.listing__created_at__extract_doy + , subq_22.ds__day AS metric_time__day + , subq_22.ds__week AS metric_time__week + , subq_22.ds__month AS metric_time__month + , subq_22.ds__quarter AS metric_time__quarter + , subq_22.ds__year AS metric_time__year + , subq_22.ds__extract_year AS metric_time__extract_year + , subq_22.ds__extract_quarter AS metric_time__extract_quarter + , subq_22.ds__extract_month AS metric_time__extract_month + , subq_22.ds__extract_day AS metric_time__extract_day + , subq_22.ds__extract_dow AS metric_time__extract_dow + , subq_22.ds__extract_doy AS metric_time__extract_doy + , subq_22.listing + , subq_22.user + , subq_22.listing__user + , subq_22.country_latest + , subq_22.is_lux_latest + , subq_22.capacity_latest + , subq_22.listing__country_latest + , subq_22.listing__is_lux_latest + , subq_22.listing__capacity_latest + , subq_22.listings + , subq_22.largest_listing + , subq_22.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + ON + subq_21.listing = subq_24.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_25 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_26 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + GROUP BY + subq_27.listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_28 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_29 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_38.listing__capacity_latest + , subq_38.views + FROM ( + -- Aggregate Measures + SELECT + subq_37.listing__capacity_latest + , SUM(subq_37.views) AS views + FROM ( + -- Pass Only Elements: ['views', 'listing__capacity_latest'] + SELECT + subq_36.listing__capacity_latest + , subq_36.views + FROM ( + -- Constrain Output with WHERE + SELECT + subq_35.ds__day + , subq_35.ds__week + , subq_35.ds__month + , subq_35.ds__quarter + , subq_35.ds__year + , subq_35.ds__extract_year + , subq_35.ds__extract_quarter + , subq_35.ds__extract_month + , subq_35.ds__extract_day + , subq_35.ds__extract_dow + , subq_35.ds__extract_doy + , subq_35.ds_partitioned__day + , subq_35.ds_partitioned__week + , subq_35.ds_partitioned__month + , subq_35.ds_partitioned__quarter + , subq_35.ds_partitioned__year + , subq_35.ds_partitioned__extract_year + , subq_35.ds_partitioned__extract_quarter + , subq_35.ds_partitioned__extract_month + , subq_35.ds_partitioned__extract_day + , subq_35.ds_partitioned__extract_dow + , subq_35.ds_partitioned__extract_doy + , subq_35.view__ds__day + , subq_35.view__ds__week + , subq_35.view__ds__month + , subq_35.view__ds__quarter + , subq_35.view__ds__year + , subq_35.view__ds__extract_year + , subq_35.view__ds__extract_quarter + , subq_35.view__ds__extract_month + , subq_35.view__ds__extract_day + , subq_35.view__ds__extract_dow + , subq_35.view__ds__extract_doy + , subq_35.view__ds_partitioned__day + , subq_35.view__ds_partitioned__week + , subq_35.view__ds_partitioned__month + , subq_35.view__ds_partitioned__quarter + , subq_35.view__ds_partitioned__year + , subq_35.view__ds_partitioned__extract_year + , subq_35.view__ds_partitioned__extract_quarter + , subq_35.view__ds_partitioned__extract_month + , subq_35.view__ds_partitioned__extract_day + , subq_35.view__ds_partitioned__extract_dow + , subq_35.view__ds_partitioned__extract_doy + , subq_35.metric_time__day + , subq_35.metric_time__week + , subq_35.metric_time__month + , subq_35.metric_time__quarter + , subq_35.metric_time__year + , subq_35.metric_time__extract_year + , subq_35.metric_time__extract_quarter + , subq_35.metric_time__extract_month + , subq_35.metric_time__extract_day + , subq_35.metric_time__extract_dow + , subq_35.metric_time__extract_doy + , subq_35.listing + , subq_35.user + , subq_35.view__listing + , subq_35.view__user + , subq_35.listing__is_lux_latest + , subq_35.listing__capacity_latest + , subq_35.views + FROM ( + -- Join Standard Outputs + SELECT + subq_34.is_lux_latest AS listing__is_lux_latest + , subq_34.capacity_latest AS listing__capacity_latest + , subq_31.ds__day AS ds__day + , subq_31.ds__week AS ds__week + , subq_31.ds__month AS ds__month + , subq_31.ds__quarter AS ds__quarter + , subq_31.ds__year AS ds__year + , subq_31.ds__extract_year AS ds__extract_year + , subq_31.ds__extract_quarter AS ds__extract_quarter + , subq_31.ds__extract_month AS ds__extract_month + , subq_31.ds__extract_day AS ds__extract_day + , subq_31.ds__extract_dow AS ds__extract_dow + , subq_31.ds__extract_doy AS ds__extract_doy + , subq_31.ds_partitioned__day AS ds_partitioned__day + , subq_31.ds_partitioned__week AS ds_partitioned__week + , subq_31.ds_partitioned__month AS ds_partitioned__month + , subq_31.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_31.ds_partitioned__year AS ds_partitioned__year + , subq_31.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_31.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_31.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_31.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_31.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_31.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_31.view__ds__day AS view__ds__day + , subq_31.view__ds__week AS view__ds__week + , subq_31.view__ds__month AS view__ds__month + , subq_31.view__ds__quarter AS view__ds__quarter + , subq_31.view__ds__year AS view__ds__year + , subq_31.view__ds__extract_year AS view__ds__extract_year + , subq_31.view__ds__extract_quarter AS view__ds__extract_quarter + , subq_31.view__ds__extract_month AS view__ds__extract_month + , subq_31.view__ds__extract_day AS view__ds__extract_day + , subq_31.view__ds__extract_dow AS view__ds__extract_dow + , subq_31.view__ds__extract_doy AS view__ds__extract_doy + , subq_31.view__ds_partitioned__day AS view__ds_partitioned__day + , subq_31.view__ds_partitioned__week AS view__ds_partitioned__week + , subq_31.view__ds_partitioned__month AS view__ds_partitioned__month + , subq_31.view__ds_partitioned__quarter AS view__ds_partitioned__quarter + , subq_31.view__ds_partitioned__year AS view__ds_partitioned__year + , subq_31.view__ds_partitioned__extract_year AS view__ds_partitioned__extract_year + , subq_31.view__ds_partitioned__extract_quarter AS view__ds_partitioned__extract_quarter + , subq_31.view__ds_partitioned__extract_month AS view__ds_partitioned__extract_month + , subq_31.view__ds_partitioned__extract_day AS view__ds_partitioned__extract_day + , subq_31.view__ds_partitioned__extract_dow AS view__ds_partitioned__extract_dow + , subq_31.view__ds_partitioned__extract_doy AS view__ds_partitioned__extract_doy + , subq_31.metric_time__day AS metric_time__day + , subq_31.metric_time__week AS metric_time__week + , subq_31.metric_time__month AS metric_time__month + , subq_31.metric_time__quarter AS metric_time__quarter + , subq_31.metric_time__year AS metric_time__year + , subq_31.metric_time__extract_year AS metric_time__extract_year + , subq_31.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_31.metric_time__extract_month AS metric_time__extract_month + , subq_31.metric_time__extract_day AS metric_time__extract_day + , subq_31.metric_time__extract_dow AS metric_time__extract_dow + , subq_31.metric_time__extract_doy AS metric_time__extract_doy + , subq_31.listing AS listing + , subq_31.user AS user + , subq_31.view__listing AS view__listing + , subq_31.view__user AS view__user + , subq_31.views AS views + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_30.ds__day + , subq_30.ds__week + , subq_30.ds__month + , subq_30.ds__quarter + , subq_30.ds__year + , subq_30.ds__extract_year + , subq_30.ds__extract_quarter + , subq_30.ds__extract_month + , subq_30.ds__extract_day + , subq_30.ds__extract_dow + , subq_30.ds__extract_doy + , subq_30.ds_partitioned__day + , subq_30.ds_partitioned__week + , subq_30.ds_partitioned__month + , subq_30.ds_partitioned__quarter + , subq_30.ds_partitioned__year + , subq_30.ds_partitioned__extract_year + , subq_30.ds_partitioned__extract_quarter + , subq_30.ds_partitioned__extract_month + , subq_30.ds_partitioned__extract_day + , subq_30.ds_partitioned__extract_dow + , subq_30.ds_partitioned__extract_doy + , subq_30.view__ds__day + , subq_30.view__ds__week + , subq_30.view__ds__month + , subq_30.view__ds__quarter + , subq_30.view__ds__year + , subq_30.view__ds__extract_year + , subq_30.view__ds__extract_quarter + , subq_30.view__ds__extract_month + , subq_30.view__ds__extract_day + , subq_30.view__ds__extract_dow + , subq_30.view__ds__extract_doy + , subq_30.view__ds_partitioned__day + , subq_30.view__ds_partitioned__week + , subq_30.view__ds_partitioned__month + , subq_30.view__ds_partitioned__quarter + , subq_30.view__ds_partitioned__year + , subq_30.view__ds_partitioned__extract_year + , subq_30.view__ds_partitioned__extract_quarter + , subq_30.view__ds_partitioned__extract_month + , subq_30.view__ds_partitioned__extract_day + , subq_30.view__ds_partitioned__extract_dow + , subq_30.view__ds_partitioned__extract_doy + , subq_30.ds__day AS metric_time__day + , subq_30.ds__week AS metric_time__week + , subq_30.ds__month AS metric_time__month + , subq_30.ds__quarter AS metric_time__quarter + , subq_30.ds__year AS metric_time__year + , subq_30.ds__extract_year AS metric_time__extract_year + , subq_30.ds__extract_quarter AS metric_time__extract_quarter + , subq_30.ds__extract_month AS metric_time__extract_month + , subq_30.ds__extract_day AS metric_time__extract_day + , subq_30.ds__extract_dow AS metric_time__extract_dow + , subq_30.ds__extract_doy AS metric_time__extract_doy + , subq_30.listing + , subq_30.user + , subq_30.view__listing + , subq_30.view__user + , subq_30.views + FROM ( + -- Read Elements From Semantic Model 'views_source' + SELECT + 1 AS views + , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day + , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week + , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month + , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter + , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year + , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy + , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , views_source_src_28000.listing_id AS listing + , views_source_src_28000.user_id AS user + , views_source_src_28000.listing_id AS view__listing + , views_source_src_28000.user_id AS view__user + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_30 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] + SELECT + subq_33.listing + , subq_33.is_lux_latest + , subq_33.capacity_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_32.ds__day + , subq_32.ds__week + , subq_32.ds__month + , subq_32.ds__quarter + , subq_32.ds__year + , subq_32.ds__extract_year + , subq_32.ds__extract_quarter + , subq_32.ds__extract_month + , subq_32.ds__extract_day + , subq_32.ds__extract_dow + , subq_32.ds__extract_doy + , subq_32.created_at__day + , subq_32.created_at__week + , subq_32.created_at__month + , subq_32.created_at__quarter + , subq_32.created_at__year + , subq_32.created_at__extract_year + , subq_32.created_at__extract_quarter + , subq_32.created_at__extract_month + , subq_32.created_at__extract_day + , subq_32.created_at__extract_dow + , subq_32.created_at__extract_doy + , subq_32.listing__ds__day + , subq_32.listing__ds__week + , subq_32.listing__ds__month + , subq_32.listing__ds__quarter + , subq_32.listing__ds__year + , subq_32.listing__ds__extract_year + , subq_32.listing__ds__extract_quarter + , subq_32.listing__ds__extract_month + , subq_32.listing__ds__extract_day + , subq_32.listing__ds__extract_dow + , subq_32.listing__ds__extract_doy + , subq_32.listing__created_at__day + , subq_32.listing__created_at__week + , subq_32.listing__created_at__month + , subq_32.listing__created_at__quarter + , subq_32.listing__created_at__year + , subq_32.listing__created_at__extract_year + , subq_32.listing__created_at__extract_quarter + , subq_32.listing__created_at__extract_month + , subq_32.listing__created_at__extract_day + , subq_32.listing__created_at__extract_dow + , subq_32.listing__created_at__extract_doy + , subq_32.ds__day AS metric_time__day + , subq_32.ds__week AS metric_time__week + , subq_32.ds__month AS metric_time__month + , subq_32.ds__quarter AS metric_time__quarter + , subq_32.ds__year AS metric_time__year + , subq_32.ds__extract_year AS metric_time__extract_year + , subq_32.ds__extract_quarter AS metric_time__extract_quarter + , subq_32.ds__extract_month AS metric_time__extract_month + , subq_32.ds__extract_day AS metric_time__extract_day + , subq_32.ds__extract_dow AS metric_time__extract_dow + , subq_32.ds__extract_doy AS metric_time__extract_doy + , subq_32.listing + , subq_32.user + , subq_32.listing__user + , subq_32.country_latest + , subq_32.is_lux_latest + , subq_32.capacity_latest + , subq_32.listing__country_latest + , subq_32.listing__is_lux_latest + , subq_32.listing__capacity_latest + , subq_32.listings + , subq_32.largest_listing + , subq_32.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_32 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_33 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_34 + ON + subq_31.listing = subq_34.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_36 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_37 + GROUP BY + subq_37.listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_38 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_39 + ON + subq_29.listing__capacity_latest = subq_39.listing__capacity_latest + GROUP BY + COALESCE(subq_29.listing__capacity_latest, subq_39.listing__capacity_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_40 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_41 +ON + COALESCE(subq_9.listing__capacity_latest, subq_19.listing__capacity_latest) = subq_41.listing__capacity_latest +GROUP BY + COALESCE(subq_9.listing__capacity_latest, subq_19.listing__capacity_latest, subq_41.listing__capacity_latest) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql new file mode 100644 index 0000000000..453473eb19 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql @@ -0,0 +1,114 @@ +test_name: test_saved_query_with_metric_joins_and_filter +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we join to a time spine and query the filter input. + + This should produce a SQL query that applies the filter outside of the time spine join. +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +WITH cm_6_cte AS ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'listing__capacity_latest'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + listing__capacity_latest + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , subq_43.metric_time__day AS metric_time__day + , subq_43.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_43 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_43.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_47 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + GROUP BY + listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +, cm_7_cte AS ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['views', 'listing__capacity_latest'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + listing__capacity_latest + , SUM(views) AS views + FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , subq_53.metric_time__day AS metric_time__day + , subq_53.views AS views + FROM ( + -- Read Elements From Semantic Model 'views_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS views + FROM ***************************.fct_views views_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_53 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_53.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_57 + WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + GROUP BY + listing__capacity_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest, subq_64.listing__capacity_latest) AS listing__capacity_latest + , MAX(cm_6_cte.bookings) AS bookings + , MAX(cm_7_cte.views) AS views + , MAX(CAST(subq_64.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_64.views, 0) AS DOUBLE PRECISION)) AS bookings_per_view +FROM cm_6_cte cm_6_cte +FULL OUTER JOIN + cm_7_cte cm_7_cte +ON + cm_6_cte.listing__capacity_latest = cm_7_cte.listing__capacity_latest +FULL OUTER JOIN +( + -- Combine Aggregated Outputs + SELECT + COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) AS listing__capacity_latest + , MAX(cm_6_cte.bookings) AS bookings + , MAX(cm_7_cte.views) AS views + FROM cm_6_cte cm_6_cte + FULL OUTER JOIN + cm_7_cte cm_7_cte + ON + cm_6_cte.listing__capacity_latest = cm_7_cte.listing__capacity_latest + GROUP BY + COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_64 +ON + COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) = subq_64.listing__capacity_latest +GROUP BY + COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest, subq_64.listing__capacity_latest) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql new file mode 100644 index 0000000000..3d18a9add8 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql @@ -0,0 +1,395 @@ +test_name: test_simple_join_to_time_spine_pushdown_filter_application +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we join to a time spine and query the filter input. + + This should produce a SQL query that applies the filter outside of the time spine join. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.booking__is_instant + , subq_9.bookings AS bookings_join_to_time_spine +FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.metric_time__day + , subq_8.booking__is_instant + , subq_8.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_7.metric_time__day AS metric_time__day + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , subq_3.booking__is_instant + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.booking__is_instant + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + , subq_3.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_7.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql new file mode 100644 index 0000000000..f176aceed9 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql @@ -0,0 +1,52 @@ +test_name: test_simple_join_to_time_spine_pushdown_filter_application +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we join to a time spine and query the filter input. + + This should produce a SQL query that applies the filter outside of the time spine join. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Compute Metrics via Expressions +SELECT + metric_time__day + , booking__is_instant + , bookings AS bookings_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_14.booking__is_instant AS booking__is_instant + , subq_14.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , booking__is_instant + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE booking__is_instant + GROUP BY + metric_time__day + , booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + time_spine_src_28006.ds = subq_14.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +WHERE booking__is_instant +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql new file mode 100644 index 0000000000..0445dc57b6 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql @@ -0,0 +1,577 @@ +test_name: test_single_categorical_dimension_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect predicate pushdown for a single categorical dimension. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.listing__country_latest + , subq_8.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_7.listing__country_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest'] + SELECT + subq_6.listing__country_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql new file mode 100644 index 0000000000..91752462a0 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql @@ -0,0 +1,39 @@ +test_name: test_single_categorical_dimension_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect predicate pushdown for a single categorical dimension. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__country_latest'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__country_latest + , SUM(bookings) AS bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.country AS listing__country_latest + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_10.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +WHERE booking__is_instant +GROUP BY + listing__country_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql new file mode 100644 index 0000000000..81e01ab3f9 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql @@ -0,0 +1,585 @@ +test_name: test_skipped_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect to skip predicate pushdown because it is unsafe. + + This is the query rendering test for the scenarios where the push down evaluation indicates that we should + skip pushdown, typically due to a lack of certainty over whether or not the query will return the same results. + + The specific scenario is less important here than that it match one that should not be pushed down. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.listing__country_latest + , subq_8.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_7.listing__country_latest + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__country_latest'] + SELECT + subq_6.listing__country_latest + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.listing__is_lux_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_4.is_lux_latest AS listing__is_lux_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'is_lux_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + , subq_3.is_lux_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE booking__is_instant OR listing__is_lux_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql new file mode 100644 index 0000000000..62bdca4439 --- /dev/null +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_skipped_pushdown +test_filename: test_predicate_pushdown_rendering.py +docstring: + Tests rendering a query where we expect to skip predicate pushdown because it is unsafe. + + This is the query rendering test for the scenarios where the push down evaluation indicates that we should + skip pushdown, typically due to a lack of certainty over whether or not the query will return the same results. + + The specific scenario is less important here than that it match one that should not be pushed down. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__country_latest'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__country_latest + , SUM(bookings) AS bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_10.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +WHERE booking__is_instant OR listing__is_lux_latest +GROUP BY + listing__country_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql new file mode 100644 index 0000000000..dc8ba73d6b --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql @@ -0,0 +1,455 @@ +test_name: test_common_semantic_model +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) AS metric_time__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_9.booking_value) AS booking_value +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.metric_time__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +FULL OUTER JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , SUM(subq_7.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +ON + subq_4.metric_time__day = subq_9.metric_time__day +GROUP BY + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql new file mode 100644 index 0000000000..412e71c60d --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql @@ -0,0 +1,24 @@ +test_name: test_common_semantic_model +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , SUM(bookings) AS bookings + , SUM(booking_value) AS booking_value +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'booking_value', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + , booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql new file mode 100644 index 0000000000..193fd5d477 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql @@ -0,0 +1,144 @@ +test_name: test_distinct_values +test_filename: test_query_rendering.py +docstring: + Tests a plan to get distinct values for a dimension. +sql_engine: Clickhouse +--- +-- Order By ['listing__country_latest'] Limit 100 +SELECT + subq_2.listing__country_latest +FROM ( + -- Pass Only Elements: ['listing__country_latest',] + SELECT + subq_1.listing__country_latest + FROM ( + -- Constrain Output with WHERE + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + WHERE listing__country_latest = 'us' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +ORDER BY subq_2.listing__country_latest DESC +LIMIT 100 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql new file mode 100644 index 0000000000..29ace5bb1c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql @@ -0,0 +1,24 @@ +test_name: test_distinct_values +test_filename: test_query_rendering.py +docstring: + Tests a plan to get distinct values for a dimension. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['listing__country_latest',] +-- Order By ['listing__country_latest'] Limit 100 +SELECT + listing__country_latest +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + country AS listing__country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +WHERE listing__country_latest = 'us' +GROUP BY + listing__country_latest +ORDER BY listing__country_latest DESC +LIMIT 100 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql new file mode 100644 index 0000000000..2476a60b81 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql @@ -0,0 +1,577 @@ +test_name: test_filter_with_where_constraint_on_join_dim +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.booking__is_instant + , subq_8.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_7.booking__is_instant + , SUM(subq_7.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant'] + SELECT + subq_6.booking__is_instant + , subq_6.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__country_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.country_latest AS listing__country_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['country_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.country_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE listing__country_latest = 'us' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql new file mode 100644 index 0000000000..8302452422 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql @@ -0,0 +1,39 @@ +test_name: test_filter_with_where_constraint_on_join_dim +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'booking__is_instant'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + booking__is_instant + , SUM(bookings) AS bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.country AS listing__country_latest + , subq_10.booking__is_instant AS booking__is_instant + , subq_10.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_10.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +WHERE listing__country_latest = 'us' +GROUP BY + booking__is_instant +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql new file mode 100644 index 0000000000..c235d7e58e --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql @@ -0,0 +1,482 @@ +test_name: test_join_to_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using a dimension with a validity window inside a measure constraint. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__day + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__day + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_5.metric_time__day + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + CROSS JOIN + ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(toYear FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(toYear FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(toYear FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(toYear FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + WHERE listing__capacity > 2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..c8ab4eb7ee --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql @@ -0,0 +1,37 @@ +test_name: test_join_to_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using a dimension with a validity window inside a measure constraint. +sql_engine: Clickhouse +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__day AS metric_time__day + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + CROSS JOIN + ***************************.dim_listings listings_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql new file mode 100644 index 0000000000..cd3a84a72b --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql @@ -0,0 +1,232 @@ +test_name: test_limit_rows +test_filename: test_query_rendering.py +docstring: + Tests a plan with a limit to the number of rows returned. +sql_engine: Clickhouse +--- +-- Order By [] Limit 1 +SELECT + subq_4.ds__day + , subq_4.bookings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.ds__day + , subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_2.ds__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'ds__day'] + SELECT + subq_1.ds__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.ds__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +LIMIT 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql new file mode 100644 index 0000000000..8b26fe989f --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql @@ -0,0 +1,26 @@ +test_name: test_limit_rows +test_filename: test_query_rendering.py +docstring: + Tests a plan with a limit to the number of rows returned. +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +-- Order By [] Limit 1 +SELECT + ds__day + , SUM(bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'ds__day'] + SELECT + DATE_TRUNC('day', ds) AS ds__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +GROUP BY + ds__day +LIMIT 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql new file mode 100644 index 0000000000..d4f54f4cd2 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql @@ -0,0 +1,159 @@ +test_name: test_local_dimension_using_local_entity +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_3.listing__country_latest + , subq_3.listings +FROM ( + -- Aggregate Measures + SELECT + subq_2.listing__country_latest + , SUM(subq_2.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings', 'listing__country_latest'] + SELECT + subq_1.listing__country_latest + , subq_1.listings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.created_at__day + , subq_0.created_at__week + , subq_0.created_at__month + , subq_0.created_at__quarter + , subq_0.created_at__year + , subq_0.created_at__extract_year + , subq_0.created_at__extract_quarter + , subq_0.created_at__extract_month + , subq_0.created_at__extract_day + , subq_0.created_at__extract_dow + , subq_0.created_at__extract_doy + , subq_0.listing__ds__day + , subq_0.listing__ds__week + , subq_0.listing__ds__month + , subq_0.listing__ds__quarter + , subq_0.listing__ds__year + , subq_0.listing__ds__extract_year + , subq_0.listing__ds__extract_quarter + , subq_0.listing__ds__extract_month + , subq_0.listing__ds__extract_day + , subq_0.listing__ds__extract_dow + , subq_0.listing__ds__extract_doy + , subq_0.listing__created_at__day + , subq_0.listing__created_at__week + , subq_0.listing__created_at__month + , subq_0.listing__created_at__quarter + , subq_0.listing__created_at__year + , subq_0.listing__created_at__extract_year + , subq_0.listing__created_at__extract_quarter + , subq_0.listing__created_at__extract_month + , subq_0.listing__created_at__extract_day + , subq_0.listing__created_at__extract_dow + , subq_0.listing__created_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.user + , subq_0.listing__user + , subq_0.country_latest + , subq_0.is_lux_latest + , subq_0.capacity_latest + , subq_0.listing__country_latest + , subq_0.listing__is_lux_latest + , subq_0.listing__capacity_latest + , subq_0.listings + , subq_0.largest_listing + , subq_0.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql new file mode 100644 index 0000000000..33cc2cc992 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_local_dimension_using_local_entity +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__country_latest + , SUM(listings) AS listings +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['listings', 'listing__country_latest'] + SELECT + country AS listing__country_latest + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +GROUP BY + listing__country_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql new file mode 100644 index 0000000000..0e3b96a3e5 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql @@ -0,0 +1,1392 @@ +test_name: test_measure_constraint +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_25.metric_time__day + , average_booking_value * bookings / NULLIF(booking_value, 0) AS lux_booking_value_rate_expr +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_9.metric_time__day, subq_19.metric_time__day, subq_24.metric_time__day) AS metric_time__day + , MAX(subq_9.average_booking_value) AS average_booking_value + , MAX(subq_19.bookings) AS bookings + , MAX(subq_24.booking_value) AS booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_8.metric_time__day + , subq_8.average_booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_7.metric_time__day + , AVG(subq_7.average_booking_value) AS average_booking_value + FROM ( + -- Pass Only Elements: ['average_booking_value', 'metric_time__day'] + SELECT + subq_6.metric_time__day + , subq_6.average_booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.paid_at__day + , subq_5.paid_at__week + , subq_5.paid_at__month + , subq_5.paid_at__quarter + , subq_5.paid_at__year + , subq_5.paid_at__extract_year + , subq_5.paid_at__extract_quarter + , subq_5.paid_at__extract_month + , subq_5.paid_at__extract_day + , subq_5.paid_at__extract_dow + , subq_5.paid_at__extract_doy + , subq_5.booking__ds__day + , subq_5.booking__ds__week + , subq_5.booking__ds__month + , subq_5.booking__ds__quarter + , subq_5.booking__ds__year + , subq_5.booking__ds__extract_year + , subq_5.booking__ds__extract_quarter + , subq_5.booking__ds__extract_month + , subq_5.booking__ds__extract_day + , subq_5.booking__ds__extract_dow + , subq_5.booking__ds__extract_doy + , subq_5.booking__ds_partitioned__day + , subq_5.booking__ds_partitioned__week + , subq_5.booking__ds_partitioned__month + , subq_5.booking__ds_partitioned__quarter + , subq_5.booking__ds_partitioned__year + , subq_5.booking__ds_partitioned__extract_year + , subq_5.booking__ds_partitioned__extract_quarter + , subq_5.booking__ds_partitioned__extract_month + , subq_5.booking__ds_partitioned__extract_day + , subq_5.booking__ds_partitioned__extract_dow + , subq_5.booking__ds_partitioned__extract_doy + , subq_5.booking__paid_at__day + , subq_5.booking__paid_at__week + , subq_5.booking__paid_at__month + , subq_5.booking__paid_at__quarter + , subq_5.booking__paid_at__year + , subq_5.booking__paid_at__extract_year + , subq_5.booking__paid_at__extract_quarter + , subq_5.booking__paid_at__extract_month + , subq_5.booking__paid_at__extract_day + , subq_5.booking__paid_at__extract_dow + , subq_5.booking__paid_at__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.listing + , subq_5.guest + , subq_5.host + , subq_5.booking__listing + , subq_5.booking__guest + , subq_5.booking__host + , subq_5.is_instant + , subq_5.booking__is_instant + , subq_5.listing__is_lux_latest + , subq_5.bookings + , subq_5.instant_bookings + , subq_5.booking_value + , subq_5.max_booking_value + , subq_5.min_booking_value + , subq_5.bookers + , subq_5.average_booking_value + , subq_5.referred_bookings + , subq_5.median_booking_value + , subq_5.booking_value_p99 + , subq_5.discrete_booking_value_p99 + , subq_5.approximate_continuous_booking_value_p99 + , subq_5.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_4.is_lux_latest AS listing__is_lux_latest + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.max_booking_value AS max_booking_value + , subq_1.min_booking_value AS min_booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + , subq_1.referred_bookings AS referred_bookings + , subq_1.median_booking_value AS median_booking_value + , subq_1.booking_value_p99 AS booking_value_p99 + , subq_1.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['is_lux_latest', 'listing'] + SELECT + subq_3.listing + , subq_3.is_lux_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.listing__ds__day + , subq_2.listing__ds__week + , subq_2.listing__ds__month + , subq_2.listing__ds__quarter + , subq_2.listing__ds__year + , subq_2.listing__ds__extract_year + , subq_2.listing__ds__extract_quarter + , subq_2.listing__ds__extract_month + , subq_2.listing__ds__extract_day + , subq_2.listing__ds__extract_dow + , subq_2.listing__ds__extract_doy + , subq_2.listing__created_at__day + , subq_2.listing__created_at__week + , subq_2.listing__created_at__month + , subq_2.listing__created_at__quarter + , subq_2.listing__created_at__year + , subq_2.listing__created_at__extract_year + , subq_2.listing__created_at__extract_quarter + , subq_2.listing__created_at__extract_month + , subq_2.listing__created_at__extract_day + , subq_2.listing__created_at__extract_dow + , subq_2.listing__created_at__extract_doy + , subq_2.ds__day AS metric_time__day + , subq_2.ds__week AS metric_time__week + , subq_2.ds__month AS metric_time__month + , subq_2.ds__quarter AS metric_time__quarter + , subq_2.ds__year AS metric_time__year + , subq_2.ds__extract_year AS metric_time__extract_year + , subq_2.ds__extract_quarter AS metric_time__extract_quarter + , subq_2.ds__extract_month AS metric_time__extract_month + , subq_2.ds__extract_day AS metric_time__extract_day + , subq_2.ds__extract_dow AS metric_time__extract_dow + , subq_2.ds__extract_doy AS metric_time__extract_doy + , subq_2.listing + , subq_2.user + , subq_2.listing__user + , subq_2.country_latest + , subq_2.is_lux_latest + , subq_2.capacity_latest + , subq_2.listing__country_latest + , subq_2.listing__is_lux_latest + , subq_2.listing__capacity_latest + , subq_2.listings + , subq_2.largest_listing + , subq_2.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_1.listing = subq_4.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + WHERE listing__is_lux_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + subq_7.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_18.metric_time__day + , subq_18.bookings + FROM ( + -- Aggregate Measures + SELECT + subq_17.metric_time__day + , SUM(subq_17.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_16.metric_time__day + , subq_16.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_15.ds__day + , subq_15.ds__week + , subq_15.ds__month + , subq_15.ds__quarter + , subq_15.ds__year + , subq_15.ds__extract_year + , subq_15.ds__extract_quarter + , subq_15.ds__extract_month + , subq_15.ds__extract_day + , subq_15.ds__extract_dow + , subq_15.ds__extract_doy + , subq_15.ds_partitioned__day + , subq_15.ds_partitioned__week + , subq_15.ds_partitioned__month + , subq_15.ds_partitioned__quarter + , subq_15.ds_partitioned__year + , subq_15.ds_partitioned__extract_year + , subq_15.ds_partitioned__extract_quarter + , subq_15.ds_partitioned__extract_month + , subq_15.ds_partitioned__extract_day + , subq_15.ds_partitioned__extract_dow + , subq_15.ds_partitioned__extract_doy + , subq_15.paid_at__day + , subq_15.paid_at__week + , subq_15.paid_at__month + , subq_15.paid_at__quarter + , subq_15.paid_at__year + , subq_15.paid_at__extract_year + , subq_15.paid_at__extract_quarter + , subq_15.paid_at__extract_month + , subq_15.paid_at__extract_day + , subq_15.paid_at__extract_dow + , subq_15.paid_at__extract_doy + , subq_15.booking__ds__day + , subq_15.booking__ds__week + , subq_15.booking__ds__month + , subq_15.booking__ds__quarter + , subq_15.booking__ds__year + , subq_15.booking__ds__extract_year + , subq_15.booking__ds__extract_quarter + , subq_15.booking__ds__extract_month + , subq_15.booking__ds__extract_day + , subq_15.booking__ds__extract_dow + , subq_15.booking__ds__extract_doy + , subq_15.booking__ds_partitioned__day + , subq_15.booking__ds_partitioned__week + , subq_15.booking__ds_partitioned__month + , subq_15.booking__ds_partitioned__quarter + , subq_15.booking__ds_partitioned__year + , subq_15.booking__ds_partitioned__extract_year + , subq_15.booking__ds_partitioned__extract_quarter + , subq_15.booking__ds_partitioned__extract_month + , subq_15.booking__ds_partitioned__extract_day + , subq_15.booking__ds_partitioned__extract_dow + , subq_15.booking__ds_partitioned__extract_doy + , subq_15.booking__paid_at__day + , subq_15.booking__paid_at__week + , subq_15.booking__paid_at__month + , subq_15.booking__paid_at__quarter + , subq_15.booking__paid_at__year + , subq_15.booking__paid_at__extract_year + , subq_15.booking__paid_at__extract_quarter + , subq_15.booking__paid_at__extract_month + , subq_15.booking__paid_at__extract_day + , subq_15.booking__paid_at__extract_dow + , subq_15.booking__paid_at__extract_doy + , subq_15.metric_time__day + , subq_15.metric_time__week + , subq_15.metric_time__month + , subq_15.metric_time__quarter + , subq_15.metric_time__year + , subq_15.metric_time__extract_year + , subq_15.metric_time__extract_quarter + , subq_15.metric_time__extract_month + , subq_15.metric_time__extract_day + , subq_15.metric_time__extract_dow + , subq_15.metric_time__extract_doy + , subq_15.listing + , subq_15.guest + , subq_15.host + , subq_15.booking__listing + , subq_15.booking__guest + , subq_15.booking__host + , subq_15.is_instant + , subq_15.booking__is_instant + , subq_15.listing__is_lux_latest + , subq_15.bookings + , subq_15.instant_bookings + , subq_15.booking_value + , subq_15.max_booking_value + , subq_15.min_booking_value + , subq_15.bookers + , subq_15.average_booking_value + , subq_15.referred_bookings + , subq_15.median_booking_value + , subq_15.booking_value_p99 + , subq_15.discrete_booking_value_p99 + , subq_15.approximate_continuous_booking_value_p99 + , subq_15.approximate_discrete_booking_value_p99 + FROM ( + -- Join Standard Outputs + SELECT + subq_14.is_lux_latest AS listing__is_lux_latest + , subq_11.ds__day AS ds__day + , subq_11.ds__week AS ds__week + , subq_11.ds__month AS ds__month + , subq_11.ds__quarter AS ds__quarter + , subq_11.ds__year AS ds__year + , subq_11.ds__extract_year AS ds__extract_year + , subq_11.ds__extract_quarter AS ds__extract_quarter + , subq_11.ds__extract_month AS ds__extract_month + , subq_11.ds__extract_day AS ds__extract_day + , subq_11.ds__extract_dow AS ds__extract_dow + , subq_11.ds__extract_doy AS ds__extract_doy + , subq_11.ds_partitioned__day AS ds_partitioned__day + , subq_11.ds_partitioned__week AS ds_partitioned__week + , subq_11.ds_partitioned__month AS ds_partitioned__month + , subq_11.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_11.ds_partitioned__year AS ds_partitioned__year + , subq_11.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_11.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_11.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_11.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_11.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_11.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_11.paid_at__day AS paid_at__day + , subq_11.paid_at__week AS paid_at__week + , subq_11.paid_at__month AS paid_at__month + , subq_11.paid_at__quarter AS paid_at__quarter + , subq_11.paid_at__year AS paid_at__year + , subq_11.paid_at__extract_year AS paid_at__extract_year + , subq_11.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_11.paid_at__extract_month AS paid_at__extract_month + , subq_11.paid_at__extract_day AS paid_at__extract_day + , subq_11.paid_at__extract_dow AS paid_at__extract_dow + , subq_11.paid_at__extract_doy AS paid_at__extract_doy + , subq_11.booking__ds__day AS booking__ds__day + , subq_11.booking__ds__week AS booking__ds__week + , subq_11.booking__ds__month AS booking__ds__month + , subq_11.booking__ds__quarter AS booking__ds__quarter + , subq_11.booking__ds__year AS booking__ds__year + , subq_11.booking__ds__extract_year AS booking__ds__extract_year + , subq_11.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_11.booking__ds__extract_month AS booking__ds__extract_month + , subq_11.booking__ds__extract_day AS booking__ds__extract_day + , subq_11.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_11.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_11.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_11.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_11.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_11.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_11.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_11.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_11.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_11.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_11.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_11.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_11.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_11.booking__paid_at__day AS booking__paid_at__day + , subq_11.booking__paid_at__week AS booking__paid_at__week + , subq_11.booking__paid_at__month AS booking__paid_at__month + , subq_11.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_11.booking__paid_at__year AS booking__paid_at__year + , subq_11.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_11.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_11.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_11.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_11.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_11.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_11.metric_time__day AS metric_time__day + , subq_11.metric_time__week AS metric_time__week + , subq_11.metric_time__month AS metric_time__month + , subq_11.metric_time__quarter AS metric_time__quarter + , subq_11.metric_time__year AS metric_time__year + , subq_11.metric_time__extract_year AS metric_time__extract_year + , subq_11.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_11.metric_time__extract_month AS metric_time__extract_month + , subq_11.metric_time__extract_day AS metric_time__extract_day + , subq_11.metric_time__extract_dow AS metric_time__extract_dow + , subq_11.metric_time__extract_doy AS metric_time__extract_doy + , subq_11.listing AS listing + , subq_11.guest AS guest + , subq_11.host AS host + , subq_11.booking__listing AS booking__listing + , subq_11.booking__guest AS booking__guest + , subq_11.booking__host AS booking__host + , subq_11.is_instant AS is_instant + , subq_11.booking__is_instant AS booking__is_instant + , subq_11.bookings AS bookings + , subq_11.instant_bookings AS instant_bookings + , subq_11.booking_value AS booking_value + , subq_11.max_booking_value AS max_booking_value + , subq_11.min_booking_value AS min_booking_value + , subq_11.bookers AS bookers + , subq_11.average_booking_value AS average_booking_value + , subq_11.referred_bookings AS referred_bookings + , subq_11.median_booking_value AS median_booking_value + , subq_11.booking_value_p99 AS booking_value_p99 + , subq_11.discrete_booking_value_p99 AS discrete_booking_value_p99 + , subq_11.approximate_continuous_booking_value_p99 AS approximate_continuous_booking_value_p99 + , subq_11.approximate_discrete_booking_value_p99 AS approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_10.ds__day + , subq_10.ds__week + , subq_10.ds__month + , subq_10.ds__quarter + , subq_10.ds__year + , subq_10.ds__extract_year + , subq_10.ds__extract_quarter + , subq_10.ds__extract_month + , subq_10.ds__extract_day + , subq_10.ds__extract_dow + , subq_10.ds__extract_doy + , subq_10.ds_partitioned__day + , subq_10.ds_partitioned__week + , subq_10.ds_partitioned__month + , subq_10.ds_partitioned__quarter + , subq_10.ds_partitioned__year + , subq_10.ds_partitioned__extract_year + , subq_10.ds_partitioned__extract_quarter + , subq_10.ds_partitioned__extract_month + , subq_10.ds_partitioned__extract_day + , subq_10.ds_partitioned__extract_dow + , subq_10.ds_partitioned__extract_doy + , subq_10.paid_at__day + , subq_10.paid_at__week + , subq_10.paid_at__month + , subq_10.paid_at__quarter + , subq_10.paid_at__year + , subq_10.paid_at__extract_year + , subq_10.paid_at__extract_quarter + , subq_10.paid_at__extract_month + , subq_10.paid_at__extract_day + , subq_10.paid_at__extract_dow + , subq_10.paid_at__extract_doy + , subq_10.booking__ds__day + , subq_10.booking__ds__week + , subq_10.booking__ds__month + , subq_10.booking__ds__quarter + , subq_10.booking__ds__year + , subq_10.booking__ds__extract_year + , subq_10.booking__ds__extract_quarter + , subq_10.booking__ds__extract_month + , subq_10.booking__ds__extract_day + , subq_10.booking__ds__extract_dow + , subq_10.booking__ds__extract_doy + , subq_10.booking__ds_partitioned__day + , subq_10.booking__ds_partitioned__week + , subq_10.booking__ds_partitioned__month + , subq_10.booking__ds_partitioned__quarter + , subq_10.booking__ds_partitioned__year + , subq_10.booking__ds_partitioned__extract_year + , subq_10.booking__ds_partitioned__extract_quarter + , subq_10.booking__ds_partitioned__extract_month + , subq_10.booking__ds_partitioned__extract_day + , subq_10.booking__ds_partitioned__extract_dow + , subq_10.booking__ds_partitioned__extract_doy + , subq_10.booking__paid_at__day + , subq_10.booking__paid_at__week + , subq_10.booking__paid_at__month + , subq_10.booking__paid_at__quarter + , subq_10.booking__paid_at__year + , subq_10.booking__paid_at__extract_year + , subq_10.booking__paid_at__extract_quarter + , subq_10.booking__paid_at__extract_month + , subq_10.booking__paid_at__extract_day + , subq_10.booking__paid_at__extract_dow + , subq_10.booking__paid_at__extract_doy + , subq_10.ds__day AS metric_time__day + , subq_10.ds__week AS metric_time__week + , subq_10.ds__month AS metric_time__month + , subq_10.ds__quarter AS metric_time__quarter + , subq_10.ds__year AS metric_time__year + , subq_10.ds__extract_year AS metric_time__extract_year + , subq_10.ds__extract_quarter AS metric_time__extract_quarter + , subq_10.ds__extract_month AS metric_time__extract_month + , subq_10.ds__extract_day AS metric_time__extract_day + , subq_10.ds__extract_dow AS metric_time__extract_dow + , subq_10.ds__extract_doy AS metric_time__extract_doy + , subq_10.listing + , subq_10.guest + , subq_10.host + , subq_10.booking__listing + , subq_10.booking__guest + , subq_10.booking__host + , subq_10.is_instant + , subq_10.booking__is_instant + , subq_10.bookings + , subq_10.instant_bookings + , subq_10.booking_value + , subq_10.max_booking_value + , subq_10.min_booking_value + , subq_10.bookers + , subq_10.average_booking_value + , subq_10.referred_bookings + , subq_10.median_booking_value + , subq_10.booking_value_p99 + , subq_10.discrete_booking_value_p99 + , subq_10.approximate_continuous_booking_value_p99 + , subq_10.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['is_lux_latest', 'listing'] + SELECT + subq_13.listing + , subq_13.is_lux_latest + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_12.ds__day + , subq_12.ds__week + , subq_12.ds__month + , subq_12.ds__quarter + , subq_12.ds__year + , subq_12.ds__extract_year + , subq_12.ds__extract_quarter + , subq_12.ds__extract_month + , subq_12.ds__extract_day + , subq_12.ds__extract_dow + , subq_12.ds__extract_doy + , subq_12.created_at__day + , subq_12.created_at__week + , subq_12.created_at__month + , subq_12.created_at__quarter + , subq_12.created_at__year + , subq_12.created_at__extract_year + , subq_12.created_at__extract_quarter + , subq_12.created_at__extract_month + , subq_12.created_at__extract_day + , subq_12.created_at__extract_dow + , subq_12.created_at__extract_doy + , subq_12.listing__ds__day + , subq_12.listing__ds__week + , subq_12.listing__ds__month + , subq_12.listing__ds__quarter + , subq_12.listing__ds__year + , subq_12.listing__ds__extract_year + , subq_12.listing__ds__extract_quarter + , subq_12.listing__ds__extract_month + , subq_12.listing__ds__extract_day + , subq_12.listing__ds__extract_dow + , subq_12.listing__ds__extract_doy + , subq_12.listing__created_at__day + , subq_12.listing__created_at__week + , subq_12.listing__created_at__month + , subq_12.listing__created_at__quarter + , subq_12.listing__created_at__year + , subq_12.listing__created_at__extract_year + , subq_12.listing__created_at__extract_quarter + , subq_12.listing__created_at__extract_month + , subq_12.listing__created_at__extract_day + , subq_12.listing__created_at__extract_dow + , subq_12.listing__created_at__extract_doy + , subq_12.ds__day AS metric_time__day + , subq_12.ds__week AS metric_time__week + , subq_12.ds__month AS metric_time__month + , subq_12.ds__quarter AS metric_time__quarter + , subq_12.ds__year AS metric_time__year + , subq_12.ds__extract_year AS metric_time__extract_year + , subq_12.ds__extract_quarter AS metric_time__extract_quarter + , subq_12.ds__extract_month AS metric_time__extract_month + , subq_12.ds__extract_day AS metric_time__extract_day + , subq_12.ds__extract_dow AS metric_time__extract_dow + , subq_12.ds__extract_doy AS metric_time__extract_doy + , subq_12.listing + , subq_12.user + , subq_12.listing__user + , subq_12.country_latest + , subq_12.is_lux_latest + , subq_12.capacity_latest + , subq_12.listing__country_latest + , subq_12.listing__is_lux_latest + , subq_12.listing__capacity_latest + , subq_12.listings + , subq_12.largest_listing + , subq_12.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_12 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + subq_11.listing = subq_14.listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + WHERE listing__is_lux_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + GROUP BY + subq_17.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + ON + subq_9.metric_time__day = subq_19.metric_time__day + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_23.metric_time__day + , subq_23.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_22.metric_time__day + , SUM(subq_22.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_21.metric_time__day + , subq_21.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_20.ds__day + , subq_20.ds__week + , subq_20.ds__month + , subq_20.ds__quarter + , subq_20.ds__year + , subq_20.ds__extract_year + , subq_20.ds__extract_quarter + , subq_20.ds__extract_month + , subq_20.ds__extract_day + , subq_20.ds__extract_dow + , subq_20.ds__extract_doy + , subq_20.ds_partitioned__day + , subq_20.ds_partitioned__week + , subq_20.ds_partitioned__month + , subq_20.ds_partitioned__quarter + , subq_20.ds_partitioned__year + , subq_20.ds_partitioned__extract_year + , subq_20.ds_partitioned__extract_quarter + , subq_20.ds_partitioned__extract_month + , subq_20.ds_partitioned__extract_day + , subq_20.ds_partitioned__extract_dow + , subq_20.ds_partitioned__extract_doy + , subq_20.paid_at__day + , subq_20.paid_at__week + , subq_20.paid_at__month + , subq_20.paid_at__quarter + , subq_20.paid_at__year + , subq_20.paid_at__extract_year + , subq_20.paid_at__extract_quarter + , subq_20.paid_at__extract_month + , subq_20.paid_at__extract_day + , subq_20.paid_at__extract_dow + , subq_20.paid_at__extract_doy + , subq_20.booking__ds__day + , subq_20.booking__ds__week + , subq_20.booking__ds__month + , subq_20.booking__ds__quarter + , subq_20.booking__ds__year + , subq_20.booking__ds__extract_year + , subq_20.booking__ds__extract_quarter + , subq_20.booking__ds__extract_month + , subq_20.booking__ds__extract_day + , subq_20.booking__ds__extract_dow + , subq_20.booking__ds__extract_doy + , subq_20.booking__ds_partitioned__day + , subq_20.booking__ds_partitioned__week + , subq_20.booking__ds_partitioned__month + , subq_20.booking__ds_partitioned__quarter + , subq_20.booking__ds_partitioned__year + , subq_20.booking__ds_partitioned__extract_year + , subq_20.booking__ds_partitioned__extract_quarter + , subq_20.booking__ds_partitioned__extract_month + , subq_20.booking__ds_partitioned__extract_day + , subq_20.booking__ds_partitioned__extract_dow + , subq_20.booking__ds_partitioned__extract_doy + , subq_20.booking__paid_at__day + , subq_20.booking__paid_at__week + , subq_20.booking__paid_at__month + , subq_20.booking__paid_at__quarter + , subq_20.booking__paid_at__year + , subq_20.booking__paid_at__extract_year + , subq_20.booking__paid_at__extract_quarter + , subq_20.booking__paid_at__extract_month + , subq_20.booking__paid_at__extract_day + , subq_20.booking__paid_at__extract_dow + , subq_20.booking__paid_at__extract_doy + , subq_20.ds__day AS metric_time__day + , subq_20.ds__week AS metric_time__week + , subq_20.ds__month AS metric_time__month + , subq_20.ds__quarter AS metric_time__quarter + , subq_20.ds__year AS metric_time__year + , subq_20.ds__extract_year AS metric_time__extract_year + , subq_20.ds__extract_quarter AS metric_time__extract_quarter + , subq_20.ds__extract_month AS metric_time__extract_month + , subq_20.ds__extract_day AS metric_time__extract_day + , subq_20.ds__extract_dow AS metric_time__extract_dow + , subq_20.ds__extract_doy AS metric_time__extract_doy + , subq_20.listing + , subq_20.guest + , subq_20.host + , subq_20.booking__listing + , subq_20.booking__guest + , subq_20.booking__host + , subq_20.is_instant + , subq_20.booking__is_instant + , subq_20.bookings + , subq_20.instant_bookings + , subq_20.booking_value + , subq_20.max_booking_value + , subq_20.min_booking_value + , subq_20.bookers + , subq_20.average_booking_value + , subq_20.referred_bookings + , subq_20.median_booking_value + , subq_20.booking_value_p99 + , subq_20.discrete_booking_value_p99 + , subq_20.approximate_continuous_booking_value_p99 + , subq_20.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_20 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_22 + GROUP BY + subq_22.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_23 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_24 + ON + COALESCE(subq_9.metric_time__day, subq_19.metric_time__day) = subq_24.metric_time__day + GROUP BY + COALESCE(subq_9.metric_time__day, subq_19.metric_time__day, subq_24.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_25 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..0b62b6dbed --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql @@ -0,0 +1,75 @@ +test_name: test_measure_constraint +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , average_booking_value * bookings / NULLIF(booking_value, 0) AS lux_booking_value_rate_expr +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_35.metric_time__day, subq_40.metric_time__day) AS metric_time__day + , MAX(subq_35.average_booking_value) AS average_booking_value + , MAX(subq_35.bookings) AS bookings + , MAX(subq_40.booking_value) AS booking_value + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['average_booking_value', 'bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , AVG(average_booking_value) AS average_booking_value + , SUM(bookings) AS bookings + FROM ( + -- Join Standard Outputs + SELECT + listings_latest_src_28000.is_lux AS listing__is_lux_latest + , subq_27.metric_time__day AS metric_time__day + , subq_27.bookings AS bookings + , subq_27.average_booking_value AS average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + , booking_value AS average_booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_27 + LEFT OUTER JOIN + ***************************.dim_listings_latest listings_latest_src_28000 + ON + subq_27.listing = listings_latest_src_28000.listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_31 + WHERE listing__is_lux_latest + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_35 + FULL OUTER JOIN + ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , SUM(booking_value) AS booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + DATE_TRUNC('day', ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_40 + ON + subq_35.metric_time__day = subq_40.metric_time__day + GROUP BY + COALESCE(subq_35.metric_time__day, subq_40.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_41 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql new file mode 100644 index 0000000000..529ea7e0f5 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql @@ -0,0 +1,566 @@ +test_name: test_measure_constraint_with_reused_measure +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day + , CAST(subq_11.booking_value_with_is_instant_constraint AS DOUBLE PRECISION) / CAST(NULLIF(subq_11.booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_value_ratio +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) AS metric_time__day + , MAX(subq_5.booking_value_with_is_instant_constraint) AS booking_value_with_is_instant_constraint + , MAX(subq_10.booking_value) AS booking_value + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , subq_4.booking_value AS booking_value_with_is_instant_constraint + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.booking_value + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + FULL OUTER JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_9.metric_time__day + , subq_9.booking_value + FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , SUM(subq_8.booking_value) AS booking_value + FROM ( + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds_partitioned__day + , subq_6.ds_partitioned__week + , subq_6.ds_partitioned__month + , subq_6.ds_partitioned__quarter + , subq_6.ds_partitioned__year + , subq_6.ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy + , subq_6.paid_at__day + , subq_6.paid_at__week + , subq_6.paid_at__month + , subq_6.paid_at__quarter + , subq_6.paid_at__year + , subq_6.paid_at__extract_year + , subq_6.paid_at__extract_quarter + , subq_6.paid_at__extract_month + , subq_6.paid_at__extract_day + , subq_6.paid_at__extract_dow + , subq_6.paid_at__extract_doy + , subq_6.booking__ds__day + , subq_6.booking__ds__week + , subq_6.booking__ds__month + , subq_6.booking__ds__quarter + , subq_6.booking__ds__year + , subq_6.booking__ds__extract_year + , subq_6.booking__ds__extract_quarter + , subq_6.booking__ds__extract_month + , subq_6.booking__ds__extract_day + , subq_6.booking__ds__extract_dow + , subq_6.booking__ds__extract_doy + , subq_6.booking__ds_partitioned__day + , subq_6.booking__ds_partitioned__week + , subq_6.booking__ds_partitioned__month + , subq_6.booking__ds_partitioned__quarter + , subq_6.booking__ds_partitioned__year + , subq_6.booking__ds_partitioned__extract_year + , subq_6.booking__ds_partitioned__extract_quarter + , subq_6.booking__ds_partitioned__extract_month + , subq_6.booking__ds_partitioned__extract_day + , subq_6.booking__ds_partitioned__extract_dow + , subq_6.booking__ds_partitioned__extract_doy + , subq_6.booking__paid_at__day + , subq_6.booking__paid_at__week + , subq_6.booking__paid_at__month + , subq_6.booking__paid_at__quarter + , subq_6.booking__paid_at__year + , subq_6.booking__paid_at__extract_year + , subq_6.booking__paid_at__extract_quarter + , subq_6.booking__paid_at__extract_month + , subq_6.booking__paid_at__extract_day + , subq_6.booking__paid_at__extract_dow + , subq_6.booking__paid_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.guest + , subq_6.host + , subq_6.booking__listing + , subq_6.booking__guest + , subq_6.booking__host + , subq_6.is_instant + , subq_6.booking__is_instant + , subq_6.bookings + , subq_6.instant_bookings + , subq_6.booking_value + , subq_6.max_booking_value + , subq_6.min_booking_value + , subq_6.bookers + , subq_6.average_booking_value + , subq_6.referred_bookings + , subq_6.median_booking_value + , subq_6.booking_value_p99 + , subq_6.discrete_booking_value_p99 + , subq_6.approximate_continuous_booking_value_p99 + , subq_6.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + ON + subq_5.metric_time__day = subq_10.metric_time__day + GROUP BY + COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql new file mode 100644 index 0000000000..3eab6fbbaf --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql @@ -0,0 +1,68 @@ +test_name: test_measure_constraint_with_reused_measure +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +WITH sma_28009_cte AS ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , booking_value + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) + +SELECT + metric_time__day AS metric_time__day + , CAST(booking_value_with_is_instant_constraint AS DOUBLE PRECISION) / CAST(NULLIF(booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_value_ratio +FROM ( + -- Combine Aggregated Outputs + SELECT + COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) AS metric_time__day + , MAX(subq_17.booking_value_with_is_instant_constraint) AS booking_value_with_is_instant_constraint + , MAX(subq_21.booking_value) AS booking_value + FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(booking_value) AS booking_value_with_is_instant_constraint + FROM ( + -- Read From CTE For node_id=sma_28009 + SELECT + metric_time__day + , booking__is_instant + , booking_value + FROM sma_28009_cte sma_28009_cte + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + WHERE booking__is_instant + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_17 + FULL OUTER JOIN + ( + -- Read From CTE For node_id=sma_28009 + -- Pass Only Elements: ['booking_value', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(booking_value) AS booking_value + FROM sma_28009_cte sma_28009_cte + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_21 + ON + subq_17.metric_time__day = subq_21.metric_time__day + GROUP BY + COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_22 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql new file mode 100644 index 0000000000..b50da6433e --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql @@ -0,0 +1,333 @@ +test_name: test_measure_constraint_with_single_expr_and_alias +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_5.metric_time__day + , delayed_bookings * 2 AS double_counted_delayed_bookings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.metric_time__day + , subq_4.bookings AS delayed_bookings + FROM ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE NOT booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql new file mode 100644 index 0000000000..29803eb671 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql @@ -0,0 +1,32 @@ +test_name: test_measure_constraint_with_single_expr_and_alias +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , delayed_bookings * 2 AS double_counted_delayed_bookings +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS delayed_bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE NOT booking__is_instant + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql new file mode 100644 index 0000000000..49fbdfe2ba --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql @@ -0,0 +1,383 @@ +test_name: test_metric_with_measures_from_multiple_sources_no_dimensions +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + CAST(subq_10.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_10.listings, 0) AS DOUBLE PRECISION) AS bookings_per_listing +FROM ( + -- Combine Aggregated Outputs + SELECT + MAX(subq_4.bookings) AS bookings + , MAX(subq_9.listings) AS listings + FROM ( + -- Compute Metrics via Expressions + SELECT + subq_3.bookings + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + CROSS JOIN + ( + -- Compute Metrics via Expressions + SELECT + subq_8.listings + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_7.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_6.listings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_5.ds__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.created_at__day + , subq_5.created_at__week + , subq_5.created_at__month + , subq_5.created_at__quarter + , subq_5.created_at__year + , subq_5.created_at__extract_year + , subq_5.created_at__extract_quarter + , subq_5.created_at__extract_month + , subq_5.created_at__extract_day + , subq_5.created_at__extract_dow + , subq_5.created_at__extract_doy + , subq_5.listing__ds__day + , subq_5.listing__ds__week + , subq_5.listing__ds__month + , subq_5.listing__ds__quarter + , subq_5.listing__ds__year + , subq_5.listing__ds__extract_year + , subq_5.listing__ds__extract_quarter + , subq_5.listing__ds__extract_month + , subq_5.listing__ds__extract_day + , subq_5.listing__ds__extract_dow + , subq_5.listing__ds__extract_doy + , subq_5.listing__created_at__day + , subq_5.listing__created_at__week + , subq_5.listing__created_at__month + , subq_5.listing__created_at__quarter + , subq_5.listing__created_at__year + , subq_5.listing__created_at__extract_year + , subq_5.listing__created_at__extract_quarter + , subq_5.listing__created_at__extract_month + , subq_5.listing__created_at__extract_day + , subq_5.listing__created_at__extract_dow + , subq_5.listing__created_at__extract_doy + , subq_5.ds__day AS metric_time__day + , subq_5.ds__week AS metric_time__week + , subq_5.ds__month AS metric_time__month + , subq_5.ds__quarter AS metric_time__quarter + , subq_5.ds__year AS metric_time__year + , subq_5.ds__extract_year AS metric_time__extract_year + , subq_5.ds__extract_quarter AS metric_time__extract_quarter + , subq_5.ds__extract_month AS metric_time__extract_month + , subq_5.ds__extract_day AS metric_time__extract_day + , subq_5.ds__extract_dow AS metric_time__extract_dow + , subq_5.ds__extract_doy AS metric_time__extract_doy + , subq_5.listing + , subq_5.user + , subq_5.listing__user + , subq_5.country_latest + , subq_5.is_lux_latest + , subq_5.capacity_latest + , subq_5.listing__country_latest + , subq_5.listing__is_lux_latest + , subq_5.listing__capacity_latest + , subq_5.listings + , subq_5.largest_listing + , subq_5.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql new file mode 100644 index 0000000000..a3f2bccf64 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql @@ -0,0 +1,32 @@ +test_name: test_metric_with_measures_from_multiple_sources_no_dimensions +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +-- Compute Metrics via Expressions +SELECT + CAST(MAX(subq_15.bookings) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_20.listings), 0) AS DOUBLE PRECISION) AS bookings_per_listing +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings',] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + SUM(1) AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_15 +CROSS JOIN +( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['listings',] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + SUM(1) AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql new file mode 100644 index 0000000000..4e02031bf9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql @@ -0,0 +1,66 @@ +test_name: test_min_max_metric_time +test_filename: test_query_rendering.py +docstring: + Tests a plan to get the min & max distinct values of metric_time. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(subq_2.metric_time__day) AS metric_time__day__min + , MAX(subq_2.metric_time__day) AS metric_time__day__max +FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_1.metric_time__day + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds__martian_day + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..b641e0e46c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_min_max_metric_time +test_filename: test_query_rendering.py +docstring: + Tests a plan to get the min & max distinct values of metric_time. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(metric_time__day) AS metric_time__day__min + , MAX(metric_time__day) AS metric_time__day__max +FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['metric_time__day',] + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine time_spine_src_28006 + GROUP BY + ds + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql new file mode 100644 index 0000000000..1d0454e85f --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql @@ -0,0 +1,66 @@ +test_name: test_min_max_metric_time_week +test_filename: test_query_rendering.py +docstring: + Tests a plan to get the min & max distinct values of metric_time with non-default granularity. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(subq_2.metric_time__week) AS metric_time__week__min + , MAX(subq_2.metric_time__week) AS metric_time__week__max +FROM ( + -- Pass Only Elements: ['metric_time__week',] + SELECT + subq_1.metric_time__week + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds__martian_day + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.ds__martian_day AS metric_time__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + GROUP BY + subq_1.metric_time__week + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql new file mode 100644 index 0000000000..e37e0931e6 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql @@ -0,0 +1,22 @@ +test_name: test_min_max_metric_time_week +test_filename: test_query_rendering.py +docstring: + Tests a plan to get the min & max distinct values of metric_time with non-default granularity. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(metric_time__week) AS metric_time__week__min + , MAX(metric_time__week) AS metric_time__week__max +FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['metric_time__week',] + SELECT + DATE_TRUNC('week', ds) AS metric_time__week + FROM ***************************.mf_time_spine time_spine_src_28006 + GROUP BY + DATE_TRUNC('week', ds) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql new file mode 100644 index 0000000000..00c5255793 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql @@ -0,0 +1,81 @@ +test_name: test_min_max_only_categorical +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a categorical dimension. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(subq_1.listing__country_latest) AS listing__country_latest__min + , MAX(subq_1.listing__country_latest) AS listing__country_latest__max +FROM ( + -- Pass Only Elements: ['listing__country_latest',] + SELECT + subq_0.listing__country_latest + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + GROUP BY + subq_0.listing__country_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql new file mode 100644 index 0000000000..211a90f50a --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_min_max_only_categorical +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a categorical dimension. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(listing__country_latest) AS listing__country_latest__min + , MAX(listing__country_latest) AS listing__country_latest__max +FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Pass Only Elements: ['listing__country_latest',] + SELECT + country AS listing__country_latest + FROM ***************************.dim_listings_latest listings_latest_src_28000 + GROUP BY + country + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql new file mode 100644 index 0000000000..f929ec1a9c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql @@ -0,0 +1,113 @@ +test_name: test_min_max_only_time +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a time dimension. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(subq_1.booking__paid_at__day) AS booking__paid_at__day__min + , MAX(subq_1.booking__paid_at__day) AS booking__paid_at__day__max +FROM ( + -- Pass Only Elements: ['booking__paid_at__day',] + SELECT + subq_0.booking__paid_at__day + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + GROUP BY + subq_0.booking__paid_at__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql new file mode 100644 index 0000000000..47d1240bcd --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_min_max_only_time +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a time dimension. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(booking__paid_at__day) AS booking__paid_at__day__min + , MAX(booking__paid_at__day) AS booking__paid_at__day__max +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['booking__paid_at__day',] + SELECT + DATE_TRUNC('day', paid_at) AS booking__paid_at__day + FROM ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + DATE_TRUNC('day', paid_at) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql new file mode 100644 index 0000000000..9402d477e2 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql @@ -0,0 +1,113 @@ +test_name: test_min_max_only_time_quarter +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a time dimension and non-default granularity. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(subq_1.booking__paid_at__quarter) AS booking__paid_at__quarter__min + , MAX(subq_1.booking__paid_at__quarter) AS booking__paid_at__quarter__max +FROM ( + -- Pass Only Elements: ['booking__paid_at__quarter',] + SELECT + subq_0.booking__paid_at__quarter + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + GROUP BY + subq_0.booking__paid_at__quarter + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql new file mode 100644 index 0000000000..1fa82a3390 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql @@ -0,0 +1,21 @@ +test_name: test_min_max_only_time_quarter +test_filename: test_query_rendering.py +docstring: + Tests a min max only query with a time dimension and non-default granularity. +sql_engine: Clickhouse +--- +-- Calculate min and max +SELECT + MIN(booking__paid_at__quarter) AS booking__paid_at__quarter__min + , MAX(booking__paid_at__quarter) AS booking__paid_at__quarter__max +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Pass Only Elements: ['booking__paid_at__quarter',] + SELECT + DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter + FROM ***************************.fct_bookings bookings_source_src_28000 + GROUP BY + DATE_TRUNC('quarter', paid_at) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_3 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql new file mode 100644 index 0000000000..55986c941c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql @@ -0,0 +1,545 @@ +test_name: test_multi_hop_through_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using a dimension that is reached through an SCD table. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.listing__user__home_state_latest + , subq_9.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , subq_8.listing__user__home_state_latest + , SUM(subq_8.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__user__home_state_latest', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.listing__user__home_state_latest + , subq_7.bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_6.user__home_state_latest AS listing__user__home_state_latest + , subq_6.window_start__day AS listing__window_start__day + , subq_6.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + CROSS JOIN + ( + -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_5.window_start__day + , subq_5.window_end__day + , subq_5.listing + , subq_5.user__home_state_latest + FROM ( + -- Join Standard Outputs + SELECT + subq_4.home_state_latest AS user__home_state_latest + , subq_4.ds__day AS user__ds__day + , subq_4.ds__week AS user__ds__week + , subq_4.ds__month AS user__ds__month + , subq_4.ds__quarter AS user__ds__quarter + , subq_4.ds__year AS user__ds__year + , subq_4.ds__extract_year AS user__ds__extract_year + , subq_4.ds__extract_quarter AS user__ds__extract_quarter + , subq_4.ds__extract_month AS user__ds__extract_month + , subq_4.ds__extract_day AS user__ds__extract_day + , subq_4.ds__extract_dow AS user__ds__extract_dow + , subq_4.ds__extract_doy AS user__ds__extract_doy + , subq_2.window_start__day AS window_start__day + , subq_2.window_start__week AS window_start__week + , subq_2.window_start__month AS window_start__month + , subq_2.window_start__quarter AS window_start__quarter + , subq_2.window_start__year AS window_start__year + , subq_2.window_start__extract_year AS window_start__extract_year + , subq_2.window_start__extract_quarter AS window_start__extract_quarter + , subq_2.window_start__extract_month AS window_start__extract_month + , subq_2.window_start__extract_day AS window_start__extract_day + , subq_2.window_start__extract_dow AS window_start__extract_dow + , subq_2.window_start__extract_doy AS window_start__extract_doy + , subq_2.window_end__day AS window_end__day + , subq_2.window_end__week AS window_end__week + , subq_2.window_end__month AS window_end__month + , subq_2.window_end__quarter AS window_end__quarter + , subq_2.window_end__year AS window_end__year + , subq_2.window_end__extract_year AS window_end__extract_year + , subq_2.window_end__extract_quarter AS window_end__extract_quarter + , subq_2.window_end__extract_month AS window_end__extract_month + , subq_2.window_end__extract_day AS window_end__extract_day + , subq_2.window_end__extract_dow AS window_end__extract_dow + , subq_2.window_end__extract_doy AS window_end__extract_doy + , subq_2.listing__window_start__day AS listing__window_start__day + , subq_2.listing__window_start__week AS listing__window_start__week + , subq_2.listing__window_start__month AS listing__window_start__month + , subq_2.listing__window_start__quarter AS listing__window_start__quarter + , subq_2.listing__window_start__year AS listing__window_start__year + , subq_2.listing__window_start__extract_year AS listing__window_start__extract_year + , subq_2.listing__window_start__extract_quarter AS listing__window_start__extract_quarter + , subq_2.listing__window_start__extract_month AS listing__window_start__extract_month + , subq_2.listing__window_start__extract_day AS listing__window_start__extract_day + , subq_2.listing__window_start__extract_dow AS listing__window_start__extract_dow + , subq_2.listing__window_start__extract_doy AS listing__window_start__extract_doy + , subq_2.listing__window_end__day AS listing__window_end__day + , subq_2.listing__window_end__week AS listing__window_end__week + , subq_2.listing__window_end__month AS listing__window_end__month + , subq_2.listing__window_end__quarter AS listing__window_end__quarter + , subq_2.listing__window_end__year AS listing__window_end__year + , subq_2.listing__window_end__extract_year AS listing__window_end__extract_year + , subq_2.listing__window_end__extract_quarter AS listing__window_end__extract_quarter + , subq_2.listing__window_end__extract_month AS listing__window_end__extract_month + , subq_2.listing__window_end__extract_day AS listing__window_end__extract_day + , subq_2.listing__window_end__extract_dow AS listing__window_end__extract_dow + , subq_2.listing__window_end__extract_doy AS listing__window_end__extract_doy + , subq_2.listing AS listing + , subq_2.user AS user + , subq_2.listing__user AS listing__user + , subq_2.country AS country + , subq_2.is_lux AS is_lux + , subq_2.capacity AS capacity + , subq_2.listing__country AS listing__country + , subq_2.listing__is_lux AS listing__is_lux + , subq_2.listing__capacity AS listing__capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(toYear FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(toYear FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(toYear FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(toYear FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(toMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'home_state_latest', + -- 'user__home_state_latest', + -- 'ds__day', + -- 'ds__week', + -- 'ds__month', + -- 'ds__quarter', + -- 'ds__year', + -- 'ds__extract_year', + -- 'ds__extract_quarter', + -- 'ds__extract_month', + -- 'ds__extract_day', + -- 'ds__extract_dow', + -- 'ds__extract_doy', + -- 'user__ds__day', + -- 'user__ds__week', + -- 'user__ds__month', + -- 'user__ds__quarter', + -- 'user__ds__year', + -- 'user__ds__extract_year', + -- 'user__ds__extract_quarter', + -- 'user__ds__extract_month', + -- 'user__ds__extract_day', + -- 'user__ds__extract_dow', + -- 'user__ds__extract_doy', + -- 'user', + -- ] + SELECT + subq_3.ds__day + , subq_3.ds__week + , subq_3.ds__month + , subq_3.ds__quarter + , subq_3.ds__year + , subq_3.ds__extract_year + , subq_3.ds__extract_quarter + , subq_3.ds__extract_month + , subq_3.ds__extract_day + , subq_3.ds__extract_dow + , subq_3.ds__extract_doy + , subq_3.user__ds__day + , subq_3.user__ds__week + , subq_3.user__ds__month + , subq_3.user__ds__quarter + , subq_3.user__ds__year + , subq_3.user__ds__extract_year + , subq_3.user__ds__extract_quarter + , subq_3.user__ds__extract_month + , subq_3.user__ds__extract_day + , subq_3.user__ds__extract_dow + , subq_3.user__ds__extract_doy + , subq_3.user + , subq_3.home_state_latest + , subq_3.user__home_state_latest + FROM ( + -- Read Elements From Semantic Model 'users_latest' + SELECT + DATE_TRUNC('day', users_latest_src_26000.ds) AS ds__day + , DATE_TRUNC('week', users_latest_src_26000.ds) AS ds__week + , DATE_TRUNC('month', users_latest_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', users_latest_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', users_latest_src_26000.ds) AS ds__year + , EXTRACT(toYear FROM users_latest_src_26000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_latest_src_26000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_26000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_26000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_26000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_26000.ds) AS ds__extract_doy + , users_latest_src_26000.home_state_latest + , DATE_TRUNC('day', users_latest_src_26000.ds) AS user__ds__day + , DATE_TRUNC('week', users_latest_src_26000.ds) AS user__ds__week + , DATE_TRUNC('month', users_latest_src_26000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_latest_src_26000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_latest_src_26000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_latest_src_26000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_latest_src_26000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_latest_src_26000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_latest_src_26000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_latest_src_26000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_latest_src_26000.ds) AS user__ds__extract_doy + , users_latest_src_26000.home_state_latest AS user__home_state_latest + , users_latest_src_26000.user_id AS user + FROM ***************************.dim_users_latest users_latest_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_2.user = subq_4.user + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + , subq_8.listing__user__home_state_latest + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..48e83566a9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql @@ -0,0 +1,44 @@ +test_name: test_multi_hop_through_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using a dimension that is reached through an SCD table. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['bookings', 'listing__user__home_state_latest', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day AS metric_time__day + , subq_16.user__home_state_latest AS listing__user__home_state_latest + , SUM(subq_11.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +CROSS JOIN +( + -- Join Standard Outputs + -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] + SELECT + listings_src_26000.active_from AS window_start__day + , listings_src_26000.active_to AS window_end__day + , listings_src_26000.listing_id AS listing + , users_latest_src_26000.home_state_latest AS user__home_state_latest + FROM ***************************.dim_listings listings_src_26000 + LEFT OUTER JOIN + ***************************.dim_users_latest users_latest_src_26000 + ON + listings_src_26000.user_id = users_latest_src_26000.user_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +GROUP BY + subq_11.metric_time__day + , subq_16.user__home_state_latest +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql new file mode 100644 index 0000000000..ace6355e51 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql @@ -0,0 +1,522 @@ +test_name: test_multi_hop_to_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using an SCD dimension that is reached through another table. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.listing__lux_listing__is_confirmed_lux + , subq_9.bookings +FROM ( + -- Aggregate Measures + SELECT + subq_8.metric_time__day + , subq_8.listing__lux_listing__is_confirmed_lux + , SUM(subq_8.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__lux_listing__is_confirmed_lux', 'metric_time__day'] + SELECT + subq_7.metric_time__day + , subq_7.listing__lux_listing__is_confirmed_lux + , subq_7.bookings + FROM ( + -- Join Standard Outputs + SELECT + subq_6.lux_listing__is_confirmed_lux AS listing__lux_listing__is_confirmed_lux + , subq_6.lux_listing__window_start__day AS listing__lux_listing__window_start__day + , subq_6.lux_listing__window_end__day AS listing__lux_listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + CROSS JOIN + ( + -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] + SELECT + subq_5.lux_listing__window_start__day + , subq_5.lux_listing__window_end__day + , subq_5.listing + , subq_5.lux_listing__is_confirmed_lux + FROM ( + -- Join Standard Outputs + SELECT + subq_4.is_confirmed_lux AS lux_listing__is_confirmed_lux + , subq_4.window_start__day AS lux_listing__window_start__day + , subq_4.window_start__week AS lux_listing__window_start__week + , subq_4.window_start__month AS lux_listing__window_start__month + , subq_4.window_start__quarter AS lux_listing__window_start__quarter + , subq_4.window_start__year AS lux_listing__window_start__year + , subq_4.window_start__extract_year AS lux_listing__window_start__extract_year + , subq_4.window_start__extract_quarter AS lux_listing__window_start__extract_quarter + , subq_4.window_start__extract_month AS lux_listing__window_start__extract_month + , subq_4.window_start__extract_day AS lux_listing__window_start__extract_day + , subq_4.window_start__extract_dow AS lux_listing__window_start__extract_dow + , subq_4.window_start__extract_doy AS lux_listing__window_start__extract_doy + , subq_4.window_end__day AS lux_listing__window_end__day + , subq_4.window_end__week AS lux_listing__window_end__week + , subq_4.window_end__month AS lux_listing__window_end__month + , subq_4.window_end__quarter AS lux_listing__window_end__quarter + , subq_4.window_end__year AS lux_listing__window_end__year + , subq_4.window_end__extract_year AS lux_listing__window_end__extract_year + , subq_4.window_end__extract_quarter AS lux_listing__window_end__extract_quarter + , subq_4.window_end__extract_month AS lux_listing__window_end__extract_month + , subq_4.window_end__extract_day AS lux_listing__window_end__extract_day + , subq_4.window_end__extract_dow AS lux_listing__window_end__extract_dow + , subq_4.window_end__extract_doy AS lux_listing__window_end__extract_doy + , subq_2.listing AS listing + , subq_2.lux_listing AS lux_listing + , subq_2.listing__lux_listing AS listing__lux_listing + FROM ( + -- Read Elements From Semantic Model 'lux_listing_mapping' + SELECT + lux_listing_mapping_src_26000.listing_id AS listing + , lux_listing_mapping_src_26000.lux_listing_id AS lux_listing + , lux_listing_mapping_src_26000.lux_listing_id AS listing__lux_listing + FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'is_confirmed_lux', + -- 'lux_listing__is_confirmed_lux', + -- 'window_start__day', + -- 'window_start__week', + -- 'window_start__month', + -- 'window_start__quarter', + -- 'window_start__year', + -- 'window_start__extract_year', + -- 'window_start__extract_quarter', + -- 'window_start__extract_month', + -- 'window_start__extract_day', + -- 'window_start__extract_dow', + -- 'window_start__extract_doy', + -- 'window_end__day', + -- 'window_end__week', + -- 'window_end__month', + -- 'window_end__quarter', + -- 'window_end__year', + -- 'window_end__extract_year', + -- 'window_end__extract_quarter', + -- 'window_end__extract_month', + -- 'window_end__extract_day', + -- 'window_end__extract_dow', + -- 'window_end__extract_doy', + -- 'lux_listing__window_start__day', + -- 'lux_listing__window_start__week', + -- 'lux_listing__window_start__month', + -- 'lux_listing__window_start__quarter', + -- 'lux_listing__window_start__year', + -- 'lux_listing__window_start__extract_year', + -- 'lux_listing__window_start__extract_quarter', + -- 'lux_listing__window_start__extract_month', + -- 'lux_listing__window_start__extract_day', + -- 'lux_listing__window_start__extract_dow', + -- 'lux_listing__window_start__extract_doy', + -- 'lux_listing__window_end__day', + -- 'lux_listing__window_end__week', + -- 'lux_listing__window_end__month', + -- 'lux_listing__window_end__quarter', + -- 'lux_listing__window_end__year', + -- 'lux_listing__window_end__extract_year', + -- 'lux_listing__window_end__extract_quarter', + -- 'lux_listing__window_end__extract_month', + -- 'lux_listing__window_end__extract_day', + -- 'lux_listing__window_end__extract_dow', + -- 'lux_listing__window_end__extract_doy', + -- 'lux_listing', + -- ] + SELECT + subq_3.window_start__day + , subq_3.window_start__week + , subq_3.window_start__month + , subq_3.window_start__quarter + , subq_3.window_start__year + , subq_3.window_start__extract_year + , subq_3.window_start__extract_quarter + , subq_3.window_start__extract_month + , subq_3.window_start__extract_day + , subq_3.window_start__extract_dow + , subq_3.window_start__extract_doy + , subq_3.window_end__day + , subq_3.window_end__week + , subq_3.window_end__month + , subq_3.window_end__quarter + , subq_3.window_end__year + , subq_3.window_end__extract_year + , subq_3.window_end__extract_quarter + , subq_3.window_end__extract_month + , subq_3.window_end__extract_day + , subq_3.window_end__extract_dow + , subq_3.window_end__extract_doy + , subq_3.lux_listing__window_start__day + , subq_3.lux_listing__window_start__week + , subq_3.lux_listing__window_start__month + , subq_3.lux_listing__window_start__quarter + , subq_3.lux_listing__window_start__year + , subq_3.lux_listing__window_start__extract_year + , subq_3.lux_listing__window_start__extract_quarter + , subq_3.lux_listing__window_start__extract_month + , subq_3.lux_listing__window_start__extract_day + , subq_3.lux_listing__window_start__extract_dow + , subq_3.lux_listing__window_start__extract_doy + , subq_3.lux_listing__window_end__day + , subq_3.lux_listing__window_end__week + , subq_3.lux_listing__window_end__month + , subq_3.lux_listing__window_end__quarter + , subq_3.lux_listing__window_end__year + , subq_3.lux_listing__window_end__extract_year + , subq_3.lux_listing__window_end__extract_quarter + , subq_3.lux_listing__window_end__extract_month + , subq_3.lux_listing__window_end__extract_day + , subq_3.lux_listing__window_end__extract_dow + , subq_3.lux_listing__window_end__extract_doy + , subq_3.lux_listing + , subq_3.is_confirmed_lux + , subq_3.lux_listing__is_confirmed_lux + FROM ( + -- Read Elements From Semantic Model 'lux_listings' + SELECT + lux_listings_src_26000.valid_from AS window_start__day + , DATE_TRUNC('week', lux_listings_src_26000.valid_from) AS window_start__week + , DATE_TRUNC('month', lux_listings_src_26000.valid_from) AS window_start__month + , DATE_TRUNC('quarter', lux_listings_src_26000.valid_from) AS window_start__quarter + , DATE_TRUNC('year', lux_listings_src_26000.valid_from) AS window_start__year + , EXTRACT(toYear FROM lux_listings_src_26000.valid_from) AS window_start__extract_year + , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_from) AS window_start__extract_quarter + , EXTRACT(toMonth FROM lux_listings_src_26000.valid_from) AS window_start__extract_month + , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_from) AS window_start__extract_day + , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_from) AS window_start__extract_dow + , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_from) AS window_start__extract_doy + , lux_listings_src_26000.valid_to AS window_end__day + , DATE_TRUNC('week', lux_listings_src_26000.valid_to) AS window_end__week + , DATE_TRUNC('month', lux_listings_src_26000.valid_to) AS window_end__month + , DATE_TRUNC('quarter', lux_listings_src_26000.valid_to) AS window_end__quarter + , DATE_TRUNC('year', lux_listings_src_26000.valid_to) AS window_end__year + , EXTRACT(toYear FROM lux_listings_src_26000.valid_to) AS window_end__extract_year + , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_to) AS window_end__extract_quarter + , EXTRACT(toMonth FROM lux_listings_src_26000.valid_to) AS window_end__extract_month + , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_to) AS window_end__extract_day + , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_to) AS window_end__extract_dow + , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_to) AS window_end__extract_doy + , lux_listings_src_26000.is_confirmed_lux + , lux_listings_src_26000.valid_from AS lux_listing__window_start__day + , DATE_TRUNC('week', lux_listings_src_26000.valid_from) AS lux_listing__window_start__week + , DATE_TRUNC('month', lux_listings_src_26000.valid_from) AS lux_listing__window_start__month + , DATE_TRUNC('quarter', lux_listings_src_26000.valid_from) AS lux_listing__window_start__quarter + , DATE_TRUNC('year', lux_listings_src_26000.valid_from) AS lux_listing__window_start__year + , EXTRACT(toYear FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_year + , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_quarter + , EXTRACT(toMonth FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_month + , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_day + , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_dow + , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_doy + , lux_listings_src_26000.valid_to AS lux_listing__window_end__day + , DATE_TRUNC('week', lux_listings_src_26000.valid_to) AS lux_listing__window_end__week + , DATE_TRUNC('month', lux_listings_src_26000.valid_to) AS lux_listing__window_end__month + , DATE_TRUNC('quarter', lux_listings_src_26000.valid_to) AS lux_listing__window_end__quarter + , DATE_TRUNC('year', lux_listings_src_26000.valid_to) AS lux_listing__window_end__year + , EXTRACT(toYear FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_year + , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_quarter + , EXTRACT(toMonth FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_month + , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_day + , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_dow + , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_doy + , lux_listings_src_26000.is_confirmed_lux AS lux_listing__is_confirmed_lux + , lux_listings_src_26000.lux_listing_id AS lux_listing + FROM ***************************.dim_lux_listings lux_listings_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_2.lux_listing = subq_4.lux_listing + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + GROUP BY + subq_8.metric_time__day + , subq_8.listing__lux_listing__is_confirmed_lux + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql new file mode 100644 index 0000000000..b1b4c50b19 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql @@ -0,0 +1,44 @@ +test_name: test_multi_hop_to_scd_dimension +test_filename: test_query_rendering.py +docstring: + Tests conversion of a plan using an SCD dimension that is reached through another table. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['bookings', 'listing__lux_listing__is_confirmed_lux', 'metric_time__day'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_11.metric_time__day AS metric_time__day + , subq_16.lux_listing__is_confirmed_lux AS listing__lux_listing__is_confirmed_lux + , SUM(subq_11.bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +CROSS JOIN +( + -- Join Standard Outputs + -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] + SELECT + lux_listings_src_26000.valid_from AS lux_listing__window_start__day + , lux_listings_src_26000.valid_to AS lux_listing__window_end__day + , lux_listing_mapping_src_26000.listing_id AS listing + , lux_listings_src_26000.is_confirmed_lux AS lux_listing__is_confirmed_lux + FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_26000 + LEFT OUTER JOIN + ***************************.dim_lux_listings lux_listings_src_26000 + ON + lux_listing_mapping_src_26000.lux_listing_id = lux_listings_src_26000.lux_listing_id + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_16 +GROUP BY + subq_11.metric_time__day + , subq_16.lux_listing__is_confirmed_lux +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql new file mode 100644 index 0000000000..aaeadf00ab --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql @@ -0,0 +1,581 @@ +test_name: test_multihop_node +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_11.account_id__customer_id__customer_name + , subq_11.txn_count +FROM ( + -- Aggregate Measures + SELECT + subq_10.account_id__customer_id__customer_name + , SUM(subq_10.txn_count) AS txn_count + FROM ( + -- Pass Only Elements: ['txn_count', 'account_id__customer_id__customer_name'] + SELECT + subq_9.account_id__customer_id__customer_name + , subq_9.txn_count + FROM ( + -- Join Standard Outputs + SELECT + subq_8.customer_id__customer_name AS account_id__customer_id__customer_name + , subq_8.ds_partitioned__day AS account_id__ds_partitioned__day + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.account_id__ds_partitioned__day AS account_id__ds_partitioned__day + , subq_1.account_id__ds_partitioned__week AS account_id__ds_partitioned__week + , subq_1.account_id__ds_partitioned__month AS account_id__ds_partitioned__month + , subq_1.account_id__ds_partitioned__quarter AS account_id__ds_partitioned__quarter + , subq_1.account_id__ds_partitioned__year AS account_id__ds_partitioned__year + , subq_1.account_id__ds_partitioned__extract_year AS account_id__ds_partitioned__extract_year + , subq_1.account_id__ds_partitioned__extract_quarter AS account_id__ds_partitioned__extract_quarter + , subq_1.account_id__ds_partitioned__extract_month AS account_id__ds_partitioned__extract_month + , subq_1.account_id__ds_partitioned__extract_day AS account_id__ds_partitioned__extract_day + , subq_1.account_id__ds_partitioned__extract_dow AS account_id__ds_partitioned__extract_dow + , subq_1.account_id__ds_partitioned__extract_doy AS account_id__ds_partitioned__extract_doy + , subq_1.account_id__ds__day AS account_id__ds__day + , subq_1.account_id__ds__week AS account_id__ds__week + , subq_1.account_id__ds__month AS account_id__ds__month + , subq_1.account_id__ds__quarter AS account_id__ds__quarter + , subq_1.account_id__ds__year AS account_id__ds__year + , subq_1.account_id__ds__extract_year AS account_id__ds__extract_year + , subq_1.account_id__ds__extract_quarter AS account_id__ds__extract_quarter + , subq_1.account_id__ds__extract_month AS account_id__ds__extract_month + , subq_1.account_id__ds__extract_day AS account_id__ds__extract_day + , subq_1.account_id__ds__extract_dow AS account_id__ds__extract_dow + , subq_1.account_id__ds__extract_doy AS account_id__ds__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.account_id AS account_id + , subq_1.account_month AS account_month + , subq_1.account_id__account_month AS account_id__account_month + , subq_1.txn_count AS txn_count + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.account_id__ds_partitioned__day + , subq_0.account_id__ds_partitioned__week + , subq_0.account_id__ds_partitioned__month + , subq_0.account_id__ds_partitioned__quarter + , subq_0.account_id__ds_partitioned__year + , subq_0.account_id__ds_partitioned__extract_year + , subq_0.account_id__ds_partitioned__extract_quarter + , subq_0.account_id__ds_partitioned__extract_month + , subq_0.account_id__ds_partitioned__extract_day + , subq_0.account_id__ds_partitioned__extract_dow + , subq_0.account_id__ds_partitioned__extract_doy + , subq_0.account_id__ds__day + , subq_0.account_id__ds__week + , subq_0.account_id__ds__month + , subq_0.account_id__ds__quarter + , subq_0.account_id__ds__year + , subq_0.account_id__ds__extract_year + , subq_0.account_id__ds__extract_quarter + , subq_0.account_id__ds__extract_month + , subq_0.account_id__ds__extract_day + , subq_0.account_id__ds__extract_dow + , subq_0.account_id__ds__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.account_id + , subq_0.account_month + , subq_0.account_id__account_month + , subq_0.txn_count + FROM ( + -- Read Elements From Semantic Model 'account_month_txns' + SELECT + account_month_txns_src_22000.txn_count + , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS ds__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS ds__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS ds__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS ds__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS ds__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS ds__extract_doy + , account_month_txns_src_22000.account_month + , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS account_id__ds__day + , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS account_id__ds__week + , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS account_id__ds__month + , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter + , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS account_id__ds__year + , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_year + , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter + , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_month + , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_day + , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_dow + , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_doy + , account_month_txns_src_22000.account_month AS account_id__account_month + , account_month_txns_src_22000.account_id + FROM ***************************.account_month_txns account_month_txns_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['customer_id__customer_name', 'ds_partitioned__day', 'account_id'] + SELECT + subq_7.ds_partitioned__day + , subq_7.account_id + , subq_7.customer_id__customer_name + FROM ( + -- Join Standard Outputs + SELECT + subq_6.customer_name AS customer_id__customer_name + , subq_6.customer_atomic_weight AS customer_id__customer_atomic_weight + , subq_6.ds_partitioned__day AS customer_id__ds_partitioned__day + , subq_6.ds_partitioned__week AS customer_id__ds_partitioned__week + , subq_6.ds_partitioned__month AS customer_id__ds_partitioned__month + , subq_6.ds_partitioned__quarter AS customer_id__ds_partitioned__quarter + , subq_6.ds_partitioned__year AS customer_id__ds_partitioned__year + , subq_6.ds_partitioned__extract_year AS customer_id__ds_partitioned__extract_year + , subq_6.ds_partitioned__extract_quarter AS customer_id__ds_partitioned__extract_quarter + , subq_6.ds_partitioned__extract_month AS customer_id__ds_partitioned__extract_month + , subq_6.ds_partitioned__extract_day AS customer_id__ds_partitioned__extract_day + , subq_6.ds_partitioned__extract_dow AS customer_id__ds_partitioned__extract_dow + , subq_6.ds_partitioned__extract_doy AS customer_id__ds_partitioned__extract_doy + , subq_6.metric_time__day AS customer_id__metric_time__day + , subq_6.metric_time__week AS customer_id__metric_time__week + , subq_6.metric_time__month AS customer_id__metric_time__month + , subq_6.metric_time__quarter AS customer_id__metric_time__quarter + , subq_6.metric_time__year AS customer_id__metric_time__year + , subq_6.metric_time__extract_year AS customer_id__metric_time__extract_year + , subq_6.metric_time__extract_quarter AS customer_id__metric_time__extract_quarter + , subq_6.metric_time__extract_month AS customer_id__metric_time__extract_month + , subq_6.metric_time__extract_day AS customer_id__metric_time__extract_day + , subq_6.metric_time__extract_dow AS customer_id__metric_time__extract_dow + , subq_6.metric_time__extract_doy AS customer_id__metric_time__extract_doy + , subq_3.ds_partitioned__day AS ds_partitioned__day + , subq_3.ds_partitioned__week AS ds_partitioned__week + , subq_3.ds_partitioned__month AS ds_partitioned__month + , subq_3.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_3.ds_partitioned__year AS ds_partitioned__year + , subq_3.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_3.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_3.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_3.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_3.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_3.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_3.account_id__ds_partitioned__day AS account_id__ds_partitioned__day + , subq_3.account_id__ds_partitioned__week AS account_id__ds_partitioned__week + , subq_3.account_id__ds_partitioned__month AS account_id__ds_partitioned__month + , subq_3.account_id__ds_partitioned__quarter AS account_id__ds_partitioned__quarter + , subq_3.account_id__ds_partitioned__year AS account_id__ds_partitioned__year + , subq_3.account_id__ds_partitioned__extract_year AS account_id__ds_partitioned__extract_year + , subq_3.account_id__ds_partitioned__extract_quarter AS account_id__ds_partitioned__extract_quarter + , subq_3.account_id__ds_partitioned__extract_month AS account_id__ds_partitioned__extract_month + , subq_3.account_id__ds_partitioned__extract_day AS account_id__ds_partitioned__extract_day + , subq_3.account_id__ds_partitioned__extract_dow AS account_id__ds_partitioned__extract_dow + , subq_3.account_id__ds_partitioned__extract_doy AS account_id__ds_partitioned__extract_doy + , subq_3.bridge_account__ds_partitioned__day AS bridge_account__ds_partitioned__day + , subq_3.bridge_account__ds_partitioned__week AS bridge_account__ds_partitioned__week + , subq_3.bridge_account__ds_partitioned__month AS bridge_account__ds_partitioned__month + , subq_3.bridge_account__ds_partitioned__quarter AS bridge_account__ds_partitioned__quarter + , subq_3.bridge_account__ds_partitioned__year AS bridge_account__ds_partitioned__year + , subq_3.bridge_account__ds_partitioned__extract_year AS bridge_account__ds_partitioned__extract_year + , subq_3.bridge_account__ds_partitioned__extract_quarter AS bridge_account__ds_partitioned__extract_quarter + , subq_3.bridge_account__ds_partitioned__extract_month AS bridge_account__ds_partitioned__extract_month + , subq_3.bridge_account__ds_partitioned__extract_day AS bridge_account__ds_partitioned__extract_day + , subq_3.bridge_account__ds_partitioned__extract_dow AS bridge_account__ds_partitioned__extract_dow + , subq_3.bridge_account__ds_partitioned__extract_doy AS bridge_account__ds_partitioned__extract_doy + , subq_3.metric_time__day AS metric_time__day + , subq_3.metric_time__week AS metric_time__week + , subq_3.metric_time__month AS metric_time__month + , subq_3.metric_time__quarter AS metric_time__quarter + , subq_3.metric_time__year AS metric_time__year + , subq_3.metric_time__extract_year AS metric_time__extract_year + , subq_3.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_3.metric_time__extract_month AS metric_time__extract_month + , subq_3.metric_time__extract_day AS metric_time__extract_day + , subq_3.metric_time__extract_dow AS metric_time__extract_dow + , subq_3.metric_time__extract_doy AS metric_time__extract_doy + , subq_3.account_id AS account_id + , subq_3.customer_id AS customer_id + , subq_3.account_id__customer_id AS account_id__customer_id + , subq_3.bridge_account__account_id AS bridge_account__account_id + , subq_3.bridge_account__customer_id AS bridge_account__customer_id + , subq_3.extra_dim AS extra_dim + , subq_3.account_id__extra_dim AS account_id__extra_dim + , subq_3.bridge_account__extra_dim AS bridge_account__extra_dim + , subq_3.account_customer_combos AS account_customer_combos + FROM ( + -- Metric Time Dimension 'ds_partitioned' + SELECT + subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.account_id__ds_partitioned__day + , subq_2.account_id__ds_partitioned__week + , subq_2.account_id__ds_partitioned__month + , subq_2.account_id__ds_partitioned__quarter + , subq_2.account_id__ds_partitioned__year + , subq_2.account_id__ds_partitioned__extract_year + , subq_2.account_id__ds_partitioned__extract_quarter + , subq_2.account_id__ds_partitioned__extract_month + , subq_2.account_id__ds_partitioned__extract_day + , subq_2.account_id__ds_partitioned__extract_dow + , subq_2.account_id__ds_partitioned__extract_doy + , subq_2.bridge_account__ds_partitioned__day + , subq_2.bridge_account__ds_partitioned__week + , subq_2.bridge_account__ds_partitioned__month + , subq_2.bridge_account__ds_partitioned__quarter + , subq_2.bridge_account__ds_partitioned__year + , subq_2.bridge_account__ds_partitioned__extract_year + , subq_2.bridge_account__ds_partitioned__extract_quarter + , subq_2.bridge_account__ds_partitioned__extract_month + , subq_2.bridge_account__ds_partitioned__extract_day + , subq_2.bridge_account__ds_partitioned__extract_dow + , subq_2.bridge_account__ds_partitioned__extract_doy + , subq_2.ds_partitioned__day AS metric_time__day + , subq_2.ds_partitioned__week AS metric_time__week + , subq_2.ds_partitioned__month AS metric_time__month + , subq_2.ds_partitioned__quarter AS metric_time__quarter + , subq_2.ds_partitioned__year AS metric_time__year + , subq_2.ds_partitioned__extract_year AS metric_time__extract_year + , subq_2.ds_partitioned__extract_quarter AS metric_time__extract_quarter + , subq_2.ds_partitioned__extract_month AS metric_time__extract_month + , subq_2.ds_partitioned__extract_day AS metric_time__extract_day + , subq_2.ds_partitioned__extract_dow AS metric_time__extract_dow + , subq_2.ds_partitioned__extract_doy AS metric_time__extract_doy + , subq_2.account_id + , subq_2.customer_id + , subq_2.account_id__customer_id + , subq_2.bridge_account__account_id + , subq_2.bridge_account__customer_id + , subq_2.extra_dim + , subq_2.account_id__extra_dim + , subq_2.bridge_account__extra_dim + , subq_2.account_customer_combos + FROM ( + -- Read Elements From Semantic Model 'bridge_table' + SELECT + account_id || customer_id AS account_customer_combos + , bridge_table_src_22000.extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , bridge_table_src_22000.extra_dim AS account_id__extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , bridge_table_src_22000.extra_dim AS bridge_account__extra_dim + , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day + , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week + , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month + , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter + , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year + , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy + , bridge_table_src_22000.account_id + , bridge_table_src_22000.customer_id + , bridge_table_src_22000.customer_id AS account_id__customer_id + , bridge_table_src_22000.account_id AS bridge_account__account_id + , bridge_table_src_22000.customer_id AS bridge_account__customer_id + FROM ***************************.bridge_table bridge_table_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + LEFT OUTER JOIN + ( + -- Pass Only Elements: [ + -- 'customer_name', + -- 'customer_atomic_weight', + -- 'customer_id__customer_name', + -- 'customer_id__customer_atomic_weight', + -- 'ds_partitioned__day', + -- 'ds_partitioned__week', + -- 'ds_partitioned__month', + -- 'ds_partitioned__quarter', + -- 'ds_partitioned__year', + -- 'ds_partitioned__extract_year', + -- 'ds_partitioned__extract_quarter', + -- 'ds_partitioned__extract_month', + -- 'ds_partitioned__extract_day', + -- 'ds_partitioned__extract_dow', + -- 'ds_partitioned__extract_doy', + -- 'customer_id__ds_partitioned__day', + -- 'customer_id__ds_partitioned__week', + -- 'customer_id__ds_partitioned__month', + -- 'customer_id__ds_partitioned__quarter', + -- 'customer_id__ds_partitioned__year', + -- 'customer_id__ds_partitioned__extract_year', + -- 'customer_id__ds_partitioned__extract_quarter', + -- 'customer_id__ds_partitioned__extract_month', + -- 'customer_id__ds_partitioned__extract_day', + -- 'customer_id__ds_partitioned__extract_dow', + -- 'customer_id__ds_partitioned__extract_doy', + -- 'metric_time__day', + -- 'metric_time__week', + -- 'metric_time__month', + -- 'metric_time__quarter', + -- 'metric_time__year', + -- 'metric_time__extract_year', + -- 'metric_time__extract_quarter', + -- 'metric_time__extract_month', + -- 'metric_time__extract_day', + -- 'metric_time__extract_dow', + -- 'metric_time__extract_doy', + -- 'customer_id', + -- ] + SELECT + subq_5.ds_partitioned__day + , subq_5.ds_partitioned__week + , subq_5.ds_partitioned__month + , subq_5.ds_partitioned__quarter + , subq_5.ds_partitioned__year + , subq_5.ds_partitioned__extract_year + , subq_5.ds_partitioned__extract_quarter + , subq_5.ds_partitioned__extract_month + , subq_5.ds_partitioned__extract_day + , subq_5.ds_partitioned__extract_dow + , subq_5.ds_partitioned__extract_doy + , subq_5.customer_id__ds_partitioned__day + , subq_5.customer_id__ds_partitioned__week + , subq_5.customer_id__ds_partitioned__month + , subq_5.customer_id__ds_partitioned__quarter + , subq_5.customer_id__ds_partitioned__year + , subq_5.customer_id__ds_partitioned__extract_year + , subq_5.customer_id__ds_partitioned__extract_quarter + , subq_5.customer_id__ds_partitioned__extract_month + , subq_5.customer_id__ds_partitioned__extract_day + , subq_5.customer_id__ds_partitioned__extract_dow + , subq_5.customer_id__ds_partitioned__extract_doy + , subq_5.metric_time__day + , subq_5.metric_time__week + , subq_5.metric_time__month + , subq_5.metric_time__quarter + , subq_5.metric_time__year + , subq_5.metric_time__extract_year + , subq_5.metric_time__extract_quarter + , subq_5.metric_time__extract_month + , subq_5.metric_time__extract_day + , subq_5.metric_time__extract_dow + , subq_5.metric_time__extract_doy + , subq_5.customer_id + , subq_5.customer_name + , subq_5.customer_atomic_weight + , subq_5.customer_id__customer_name + , subq_5.customer_id__customer_atomic_weight + FROM ( + -- Metric Time Dimension 'ds_partitioned' + SELECT + subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.customer_id__ds_partitioned__day + , subq_4.customer_id__ds_partitioned__week + , subq_4.customer_id__ds_partitioned__month + , subq_4.customer_id__ds_partitioned__quarter + , subq_4.customer_id__ds_partitioned__year + , subq_4.customer_id__ds_partitioned__extract_year + , subq_4.customer_id__ds_partitioned__extract_quarter + , subq_4.customer_id__ds_partitioned__extract_month + , subq_4.customer_id__ds_partitioned__extract_day + , subq_4.customer_id__ds_partitioned__extract_dow + , subq_4.customer_id__ds_partitioned__extract_doy + , subq_4.ds_partitioned__day AS metric_time__day + , subq_4.ds_partitioned__week AS metric_time__week + , subq_4.ds_partitioned__month AS metric_time__month + , subq_4.ds_partitioned__quarter AS metric_time__quarter + , subq_4.ds_partitioned__year AS metric_time__year + , subq_4.ds_partitioned__extract_year AS metric_time__extract_year + , subq_4.ds_partitioned__extract_quarter AS metric_time__extract_quarter + , subq_4.ds_partitioned__extract_month AS metric_time__extract_month + , subq_4.ds_partitioned__extract_day AS metric_time__extract_day + , subq_4.ds_partitioned__extract_dow AS metric_time__extract_dow + , subq_4.ds_partitioned__extract_doy AS metric_time__extract_doy + , subq_4.customer_id + , subq_4.customer_name + , subq_4.customer_atomic_weight + , subq_4.customer_id__customer_name + , subq_4.customer_id__customer_atomic_weight + , subq_4.customers + FROM ( + -- Read Elements From Semantic Model 'customer_table' + SELECT + 1 AS customers + , customer_table_src_22000.customer_name + , customer_table_src_22000.customer_atomic_weight + , DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', customer_table_src_22000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', customer_table_src_22000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', customer_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', customer_table_src_22000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , customer_table_src_22000.customer_name AS customer_id__customer_name + , customer_table_src_22000.customer_atomic_weight AS customer_id__customer_atomic_weight + , DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__day + , DATE_TRUNC('week', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__week + , DATE_TRUNC('month', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__month + , DATE_TRUNC('quarter', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__quarter + , DATE_TRUNC('year', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__year + , EXTRACT(toYear FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_doy + , customer_table_src_22000.customer_id + FROM ***************************.customer_table customer_table_src_22000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + ON + ( + subq_3.customer_id = subq_6.customer_id + ) AND ( + subq_3.ds_partitioned__day = subq_6.ds_partitioned__day + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + ON + ( + subq_1.account_id = subq_8.account_id + ) AND ( + subq_1.ds_partitioned__day = subq_8.ds_partitioned__day + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + subq_10.account_id__customer_id__customer_name + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql new file mode 100644 index 0000000000..1e9c8f4d91 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_multihop_node +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['txn_count', 'account_id__customer_id__customer_name'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + subq_20.customer_id__customer_name AS account_id__customer_id__customer_name + , SUM(account_month_txns_src_22000.txn_count) AS txn_count +FROM ***************************.account_month_txns account_month_txns_src_22000 +LEFT OUTER JOIN +( + -- Join Standard Outputs + -- Pass Only Elements: ['customer_id__customer_name', 'ds_partitioned__day', 'account_id'] + SELECT + DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , bridge_table_src_22000.account_id AS account_id + , customer_table_src_22000.customer_name AS customer_id__customer_name + FROM ***************************.bridge_table bridge_table_src_22000 + LEFT OUTER JOIN + ***************************.customer_table customer_table_src_22000 + ON + ( + bridge_table_src_22000.customer_id = customer_table_src_22000.customer_id + ) AND ( + DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) = DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_20 +ON + ( + account_month_txns_src_22000.account_id = subq_20.account_id + ) AND ( + DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) = subq_20.ds_partitioned__day + ) +GROUP BY + subq_20.customer_id__customer_name +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql new file mode 100644 index 0000000000..f2d55b65e2 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql @@ -0,0 +1,554 @@ +test_name: test_multiple_metrics_no_dimensions +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + MAX(subq_5.bookings) AS bookings + , MAX(subq_11.listings) AS listings +FROM ( + -- Compute Metrics via Expressions + SELECT + subq_4.bookings + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_2.bookings + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_5 +CROSS JOIN +( + -- Compute Metrics via Expressions + SELECT + subq_10.listings + FROM ( + -- Aggregate Measures + SELECT + SUM(subq_9.listings) AS listings + FROM ( + -- Pass Only Elements: ['listings',] + SELECT + subq_8.listings + FROM ( + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + SELECT + subq_7.ds__day + , subq_7.ds__week + , subq_7.ds__month + , subq_7.ds__quarter + , subq_7.ds__year + , subq_7.ds__extract_year + , subq_7.ds__extract_quarter + , subq_7.ds__extract_month + , subq_7.ds__extract_day + , subq_7.ds__extract_dow + , subq_7.ds__extract_doy + , subq_7.created_at__day + , subq_7.created_at__week + , subq_7.created_at__month + , subq_7.created_at__quarter + , subq_7.created_at__year + , subq_7.created_at__extract_year + , subq_7.created_at__extract_quarter + , subq_7.created_at__extract_month + , subq_7.created_at__extract_day + , subq_7.created_at__extract_dow + , subq_7.created_at__extract_doy + , subq_7.listing__ds__day + , subq_7.listing__ds__week + , subq_7.listing__ds__month + , subq_7.listing__ds__quarter + , subq_7.listing__ds__year + , subq_7.listing__ds__extract_year + , subq_7.listing__ds__extract_quarter + , subq_7.listing__ds__extract_month + , subq_7.listing__ds__extract_day + , subq_7.listing__ds__extract_dow + , subq_7.listing__ds__extract_doy + , subq_7.listing__created_at__day + , subq_7.listing__created_at__week + , subq_7.listing__created_at__month + , subq_7.listing__created_at__quarter + , subq_7.listing__created_at__year + , subq_7.listing__created_at__extract_year + , subq_7.listing__created_at__extract_quarter + , subq_7.listing__created_at__extract_month + , subq_7.listing__created_at__extract_day + , subq_7.listing__created_at__extract_dow + , subq_7.listing__created_at__extract_doy + , subq_7.metric_time__day + , subq_7.metric_time__week + , subq_7.metric_time__month + , subq_7.metric_time__quarter + , subq_7.metric_time__year + , subq_7.metric_time__extract_year + , subq_7.metric_time__extract_quarter + , subq_7.metric_time__extract_month + , subq_7.metric_time__extract_day + , subq_7.metric_time__extract_dow + , subq_7.metric_time__extract_doy + , subq_7.listing + , subq_7.user + , subq_7.listing__user + , subq_7.country_latest + , subq_7.is_lux_latest + , subq_7.capacity_latest + , subq_7.listing__country_latest + , subq_7.listing__is_lux_latest + , subq_7.listing__capacity_latest + , subq_7.listings + , subq_7.largest_listing + , subq_7.smallest_listing + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_6.ds__day + , subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.created_at__day + , subq_6.created_at__week + , subq_6.created_at__month + , subq_6.created_at__quarter + , subq_6.created_at__year + , subq_6.created_at__extract_year + , subq_6.created_at__extract_quarter + , subq_6.created_at__extract_month + , subq_6.created_at__extract_day + , subq_6.created_at__extract_dow + , subq_6.created_at__extract_doy + , subq_6.listing__ds__day + , subq_6.listing__ds__week + , subq_6.listing__ds__month + , subq_6.listing__ds__quarter + , subq_6.listing__ds__year + , subq_6.listing__ds__extract_year + , subq_6.listing__ds__extract_quarter + , subq_6.listing__ds__extract_month + , subq_6.listing__ds__extract_day + , subq_6.listing__ds__extract_dow + , subq_6.listing__ds__extract_doy + , subq_6.listing__created_at__day + , subq_6.listing__created_at__week + , subq_6.listing__created_at__month + , subq_6.listing__created_at__quarter + , subq_6.listing__created_at__year + , subq_6.listing__created_at__extract_year + , subq_6.listing__created_at__extract_quarter + , subq_6.listing__created_at__extract_month + , subq_6.listing__created_at__extract_day + , subq_6.listing__created_at__extract_dow + , subq_6.listing__created_at__extract_doy + , subq_6.ds__day AS metric_time__day + , subq_6.ds__week AS metric_time__week + , subq_6.ds__month AS metric_time__month + , subq_6.ds__quarter AS metric_time__quarter + , subq_6.ds__year AS metric_time__year + , subq_6.ds__extract_year AS metric_time__extract_year + , subq_6.ds__extract_quarter AS metric_time__extract_quarter + , subq_6.ds__extract_month AS metric_time__extract_month + , subq_6.ds__extract_day AS metric_time__extract_day + , subq_6.ds__extract_dow AS metric_time__extract_dow + , subq_6.ds__extract_doy AS metric_time__extract_doy + , subq_6.listing + , subq_6.user + , subq_6.listing__user + , subq_6.country_latest + , subq_6.is_lux_latest + , subq_6.capacity_latest + , subq_6.listing__country_latest + , subq_6.listing__is_lux_latest + , subq_6.listing__capacity_latest + , subq_6.listings + , subq_6.largest_listing + , subq_6.smallest_listing + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + SELECT + 1 AS listings + , listings_latest_src_28000.capacity AS largest_listing + , listings_latest_src_28000.capacity AS smallest_listing + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , listings_latest_src_28000.country AS country_latest + , listings_latest_src_28000.is_lux AS is_lux_latest + , listings_latest_src_28000.capacity AS capacity_latest + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , listings_latest_src_28000.country AS listing__country_latest + , listings_latest_src_28000.is_lux AS listing__is_lux_latest + , listings_latest_src_28000.capacity AS listing__capacity_latest + , listings_latest_src_28000.listing_id AS listing + , listings_latest_src_28000.user_id AS user + , listings_latest_src_28000.user_id AS listing__user + FROM ***************************.dim_listings_latest listings_latest_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql new file mode 100644 index 0000000000..514d97629c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql @@ -0,0 +1,36 @@ +test_name: test_multiple_metrics_no_dimensions +test_filename: test_query_rendering.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + MAX(subq_17.bookings) AS bookings + , MAX(subq_23.listings) AS listings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + -- Pass Only Elements: ['bookings',] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + SUM(1) AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +CROSS JOIN +( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] + -- Pass Only Elements: ['listings',] + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + SUM(1) AS listings + FROM ***************************.dim_listings_latest listings_latest_src_28000 + WHERE DATE_TRUNC('day', created_at) BETWEEN '2020-01-01' AND '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_23 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql new file mode 100644 index 0000000000..b36c4ba793 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql @@ -0,0 +1,277 @@ +test_name: test_non_additive_dimension_with_non_default_grain +test_filename: test_query_rendering.py +docstring: + Tests querying a metric with a non-additive agg_time_dimension that has non-default granularity. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_6.total_account_balance_first_day_of_month +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_5.total_account_balance_first_day_of_month) AS total_account_balance_first_day_of_month + FROM ( + -- Pass Only Elements: ['total_account_balance_first_day_of_month',] + SELECT + subq_4.total_account_balance_first_day_of_month + FROM ( + -- Join on MIN(ds_month) and [] grouping by None + SELECT + subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_month__month AS ds_month__month + , subq_1.ds_month__quarter AS ds_month__quarter + , subq_1.ds_month__year AS ds_month__year + , subq_1.ds_month__extract_year AS ds_month__extract_year + , subq_1.ds_month__extract_quarter AS ds_month__extract_quarter + , subq_1.ds_month__extract_month AS ds_month__extract_month + , subq_1.account__ds__day AS account__ds__day + , subq_1.account__ds__week AS account__ds__week + , subq_1.account__ds__month AS account__ds__month + , subq_1.account__ds__quarter AS account__ds__quarter + , subq_1.account__ds__year AS account__ds__year + , subq_1.account__ds__extract_year AS account__ds__extract_year + , subq_1.account__ds__extract_quarter AS account__ds__extract_quarter + , subq_1.account__ds__extract_month AS account__ds__extract_month + , subq_1.account__ds__extract_day AS account__ds__extract_day + , subq_1.account__ds__extract_dow AS account__ds__extract_dow + , subq_1.account__ds__extract_doy AS account__ds__extract_doy + , subq_1.account__ds_month__month AS account__ds_month__month + , subq_1.account__ds_month__quarter AS account__ds_month__quarter + , subq_1.account__ds_month__year AS account__ds_month__year + , subq_1.account__ds_month__extract_year AS account__ds_month__extract_year + , subq_1.account__ds_month__extract_quarter AS account__ds_month__extract_quarter + , subq_1.account__ds_month__extract_month AS account__ds_month__extract_month + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.user AS user + , subq_1.account__user AS account__user + , subq_1.account_type AS account_type + , subq_1.account__account_type AS account__account_type + , subq_1.total_account_balance_first_day_of_month AS total_account_balance_first_day_of_month + FROM ( + -- Metric Time Dimension 'ds_month' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_month__month + , subq_0.ds_month__quarter + , subq_0.ds_month__year + , subq_0.ds_month__extract_year + , subq_0.ds_month__extract_quarter + , subq_0.ds_month__extract_month + , subq_0.account__ds__day + , subq_0.account__ds__week + , subq_0.account__ds__month + , subq_0.account__ds__quarter + , subq_0.account__ds__year + , subq_0.account__ds__extract_year + , subq_0.account__ds__extract_quarter + , subq_0.account__ds__extract_month + , subq_0.account__ds__extract_day + , subq_0.account__ds__extract_dow + , subq_0.account__ds__extract_doy + , subq_0.account__ds_month__month + , subq_0.account__ds_month__quarter + , subq_0.account__ds_month__year + , subq_0.account__ds_month__extract_year + , subq_0.account__ds_month__extract_quarter + , subq_0.account__ds_month__extract_month + , subq_0.ds_month__month AS metric_time__month + , subq_0.ds_month__quarter AS metric_time__quarter + , subq_0.ds_month__year AS metric_time__year + , subq_0.ds_month__extract_year AS metric_time__extract_year + , subq_0.ds_month__extract_quarter AS metric_time__extract_quarter + , subq_0.ds_month__extract_month AS metric_time__extract_month + , subq_0.user + , subq_0.account__user + , subq_0.account_type + , subq_0.account__account_type + , subq_0.total_account_balance_first_day_of_month + FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + INNER JOIN + ( + -- Filter row on MIN(ds_month__month) + SELECT + MIN(subq_2.ds_month__month) AS ds_month__month__complete + FROM ( + -- Metric Time Dimension 'ds_month' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_month__month + , subq_0.ds_month__quarter + , subq_0.ds_month__year + , subq_0.ds_month__extract_year + , subq_0.ds_month__extract_quarter + , subq_0.ds_month__extract_month + , subq_0.account__ds__day + , subq_0.account__ds__week + , subq_0.account__ds__month + , subq_0.account__ds__quarter + , subq_0.account__ds__year + , subq_0.account__ds__extract_year + , subq_0.account__ds__extract_quarter + , subq_0.account__ds__extract_month + , subq_0.account__ds__extract_day + , subq_0.account__ds__extract_dow + , subq_0.account__ds__extract_doy + , subq_0.account__ds_month__month + , subq_0.account__ds_month__quarter + , subq_0.account__ds_month__year + , subq_0.account__ds_month__extract_year + , subq_0.account__ds_month__extract_quarter + , subq_0.account__ds_month__extract_month + , subq_0.ds_month__month AS metric_time__month + , subq_0.ds_month__quarter AS metric_time__quarter + , subq_0.ds_month__year AS metric_time__year + , subq_0.ds_month__extract_year AS metric_time__extract_year + , subq_0.ds_month__extract_quarter AS metric_time__extract_quarter + , subq_0.ds_month__extract_month AS metric_time__extract_month + , subq_0.user + , subq_0.account__user + , subq_0.account_type + , subq_0.account__account_type + , subq_0.total_account_balance_first_day_of_month + FROM ( + -- Read Elements From Semantic Model 'accounts_source' + SELECT + accounts_source_src_28000.account_balance + , accounts_source_src_28000.account_balance AS total_account_balance_first_day + , accounts_source_src_28000.account_balance AS current_account_balance_by_user + , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , accounts_source_src_28000.account_type + , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day + , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week + , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month + , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day + , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow + , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy + , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , accounts_source_src_28000.account_type AS account__account_type + , accounts_source_src_28000.user_id AS user + , accounts_source_src_28000.user_id AS account__user + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_1.ds_month__month = subq_3.ds_month__month__complete + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_6 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql new file mode 100644 index 0000000000..9b0e6159d4 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_non_additive_dimension_with_non_default_grain +test_filename: test_query_rendering.py +docstring: + Tests querying a metric with a non-additive agg_time_dimension that has non-default granularity. +sql_engine: Clickhouse +--- +-- Join on MIN(ds_month) and [] grouping by None +-- Pass Only Elements: ['total_account_balance_first_day_of_month',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(subq_8.total_account_balance_first_day_of_month) AS total_account_balance_first_day_of_month +FROM ( + -- Read Elements From Semantic Model 'accounts_source' + -- Metric Time Dimension 'ds_month' + SELECT + DATE_TRUNC('month', ds_month) AS ds_month__month + , account_balance AS total_account_balance_first_day_of_month + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +INNER JOIN +( + -- Read Elements From Semantic Model 'accounts_source' + -- Metric Time Dimension 'ds_month' + -- Filter row on MIN(ds_month__month) + SELECT + MIN(DATE_TRUNC('month', ds_month)) AS ds_month__month__complete + FROM ***************************.fct_accounts accounts_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +ON + subq_8.ds_month__month = subq_10.ds_month__month__complete +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql new file mode 100644 index 0000000000..12c3b55071 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql @@ -0,0 +1,611 @@ +test_name: test_partitioned_join +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan where there's a join on a partitioned dimension. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.user__home_state + , subq_7.identity_verifications +FROM ( + -- Aggregate Measures + SELECT + subq_6.user__home_state + , SUM(subq_6.identity_verifications) AS identity_verifications + FROM ( + -- Pass Only Elements: ['identity_verifications', 'user__home_state'] + SELECT + subq_5.user__home_state + , subq_5.identity_verifications + FROM ( + -- Join Standard Outputs + SELECT + subq_4.home_state AS user__home_state + , subq_4.ds_partitioned__day AS user__ds_partitioned__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.verification__ds__day AS verification__ds__day + , subq_1.verification__ds__week AS verification__ds__week + , subq_1.verification__ds__month AS verification__ds__month + , subq_1.verification__ds__quarter AS verification__ds__quarter + , subq_1.verification__ds__year AS verification__ds__year + , subq_1.verification__ds__extract_year AS verification__ds__extract_year + , subq_1.verification__ds__extract_quarter AS verification__ds__extract_quarter + , subq_1.verification__ds__extract_month AS verification__ds__extract_month + , subq_1.verification__ds__extract_day AS verification__ds__extract_day + , subq_1.verification__ds__extract_dow AS verification__ds__extract_dow + , subq_1.verification__ds__extract_doy AS verification__ds__extract_doy + , subq_1.verification__ds_partitioned__day AS verification__ds_partitioned__day + , subq_1.verification__ds_partitioned__week AS verification__ds_partitioned__week + , subq_1.verification__ds_partitioned__month AS verification__ds_partitioned__month + , subq_1.verification__ds_partitioned__quarter AS verification__ds_partitioned__quarter + , subq_1.verification__ds_partitioned__year AS verification__ds_partitioned__year + , subq_1.verification__ds_partitioned__extract_year AS verification__ds_partitioned__extract_year + , subq_1.verification__ds_partitioned__extract_quarter AS verification__ds_partitioned__extract_quarter + , subq_1.verification__ds_partitioned__extract_month AS verification__ds_partitioned__extract_month + , subq_1.verification__ds_partitioned__extract_day AS verification__ds_partitioned__extract_day + , subq_1.verification__ds_partitioned__extract_dow AS verification__ds_partitioned__extract_dow + , subq_1.verification__ds_partitioned__extract_doy AS verification__ds_partitioned__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.verification AS verification + , subq_1.user AS user + , subq_1.verification__user AS verification__user + , subq_1.verification_type AS verification_type + , subq_1.verification__verification_type AS verification__verification_type + , subq_1.identity_verifications AS identity_verifications + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.verification__ds__day + , subq_0.verification__ds__week + , subq_0.verification__ds__month + , subq_0.verification__ds__quarter + , subq_0.verification__ds__year + , subq_0.verification__ds__extract_year + , subq_0.verification__ds__extract_quarter + , subq_0.verification__ds__extract_month + , subq_0.verification__ds__extract_day + , subq_0.verification__ds__extract_dow + , subq_0.verification__ds__extract_doy + , subq_0.verification__ds_partitioned__day + , subq_0.verification__ds_partitioned__week + , subq_0.verification__ds_partitioned__month + , subq_0.verification__ds_partitioned__quarter + , subq_0.verification__ds_partitioned__year + , subq_0.verification__ds_partitioned__extract_year + , subq_0.verification__ds_partitioned__extract_quarter + , subq_0.verification__ds_partitioned__extract_month + , subq_0.verification__ds_partitioned__extract_day + , subq_0.verification__ds_partitioned__extract_dow + , subq_0.verification__ds_partitioned__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.verification + , subq_0.user + , subq_0.verification__user + , subq_0.verification_type + , subq_0.verification__verification_type + , subq_0.identity_verifications + FROM ( + -- Read Elements From Semantic Model 'id_verifications' + SELECT + 1 AS identity_verifications + , DATE_TRUNC('day', id_verifications_src_28000.ds) AS ds__day + , DATE_TRUNC('week', id_verifications_src_28000.ds) AS ds__week + , DATE_TRUNC('month', id_verifications_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , id_verifications_src_28000.verification_type + , DATE_TRUNC('day', id_verifications_src_28000.ds) AS verification__ds__day + , DATE_TRUNC('week', id_verifications_src_28000.ds) AS verification__ds__week + , DATE_TRUNC('month', id_verifications_src_28000.ds) AS verification__ds__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds) AS verification__ds__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS verification__ds__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS verification__ds__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_doy + , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day + , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week + , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month + , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter + , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year + , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy + , id_verifications_src_28000.verification_type AS verification__verification_type + , id_verifications_src_28000.verification_id AS verification + , id_verifications_src_28000.user_id AS user + , id_verifications_src_28000.user_id AS verification__user + FROM ***************************.fct_id_verifications id_verifications_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + LEFT OUTER JOIN + ( + -- Pass Only Elements: ['home_state', 'ds_partitioned__day', 'user'] + SELECT + subq_3.ds_partitioned__day + , subq_3.user + , subq_3.home_state + FROM ( + -- Metric Time Dimension 'created_at' + SELECT + subq_2.ds__day + , subq_2.ds__week + , subq_2.ds__month + , subq_2.ds__quarter + , subq_2.ds__year + , subq_2.ds__extract_year + , subq_2.ds__extract_quarter + , subq_2.ds__extract_month + , subq_2.ds__extract_day + , subq_2.ds__extract_dow + , subq_2.ds__extract_doy + , subq_2.created_at__day + , subq_2.created_at__week + , subq_2.created_at__month + , subq_2.created_at__quarter + , subq_2.created_at__year + , subq_2.created_at__extract_year + , subq_2.created_at__extract_quarter + , subq_2.created_at__extract_month + , subq_2.created_at__extract_day + , subq_2.created_at__extract_dow + , subq_2.created_at__extract_doy + , subq_2.ds_partitioned__day + , subq_2.ds_partitioned__week + , subq_2.ds_partitioned__month + , subq_2.ds_partitioned__quarter + , subq_2.ds_partitioned__year + , subq_2.ds_partitioned__extract_year + , subq_2.ds_partitioned__extract_quarter + , subq_2.ds_partitioned__extract_month + , subq_2.ds_partitioned__extract_day + , subq_2.ds_partitioned__extract_dow + , subq_2.ds_partitioned__extract_doy + , subq_2.last_profile_edit_ts__millisecond + , subq_2.last_profile_edit_ts__second + , subq_2.last_profile_edit_ts__minute + , subq_2.last_profile_edit_ts__hour + , subq_2.last_profile_edit_ts__day + , subq_2.last_profile_edit_ts__week + , subq_2.last_profile_edit_ts__month + , subq_2.last_profile_edit_ts__quarter + , subq_2.last_profile_edit_ts__year + , subq_2.last_profile_edit_ts__extract_year + , subq_2.last_profile_edit_ts__extract_quarter + , subq_2.last_profile_edit_ts__extract_month + , subq_2.last_profile_edit_ts__extract_day + , subq_2.last_profile_edit_ts__extract_dow + , subq_2.last_profile_edit_ts__extract_doy + , subq_2.bio_added_ts__second + , subq_2.bio_added_ts__minute + , subq_2.bio_added_ts__hour + , subq_2.bio_added_ts__day + , subq_2.bio_added_ts__week + , subq_2.bio_added_ts__month + , subq_2.bio_added_ts__quarter + , subq_2.bio_added_ts__year + , subq_2.bio_added_ts__extract_year + , subq_2.bio_added_ts__extract_quarter + , subq_2.bio_added_ts__extract_month + , subq_2.bio_added_ts__extract_day + , subq_2.bio_added_ts__extract_dow + , subq_2.bio_added_ts__extract_doy + , subq_2.last_login_ts__minute + , subq_2.last_login_ts__hour + , subq_2.last_login_ts__day + , subq_2.last_login_ts__week + , subq_2.last_login_ts__month + , subq_2.last_login_ts__quarter + , subq_2.last_login_ts__year + , subq_2.last_login_ts__extract_year + , subq_2.last_login_ts__extract_quarter + , subq_2.last_login_ts__extract_month + , subq_2.last_login_ts__extract_day + , subq_2.last_login_ts__extract_dow + , subq_2.last_login_ts__extract_doy + , subq_2.archived_at__hour + , subq_2.archived_at__day + , subq_2.archived_at__week + , subq_2.archived_at__month + , subq_2.archived_at__quarter + , subq_2.archived_at__year + , subq_2.archived_at__extract_year + , subq_2.archived_at__extract_quarter + , subq_2.archived_at__extract_month + , subq_2.archived_at__extract_day + , subq_2.archived_at__extract_dow + , subq_2.archived_at__extract_doy + , subq_2.user__ds__day + , subq_2.user__ds__week + , subq_2.user__ds__month + , subq_2.user__ds__quarter + , subq_2.user__ds__year + , subq_2.user__ds__extract_year + , subq_2.user__ds__extract_quarter + , subq_2.user__ds__extract_month + , subq_2.user__ds__extract_day + , subq_2.user__ds__extract_dow + , subq_2.user__ds__extract_doy + , subq_2.user__created_at__day + , subq_2.user__created_at__week + , subq_2.user__created_at__month + , subq_2.user__created_at__quarter + , subq_2.user__created_at__year + , subq_2.user__created_at__extract_year + , subq_2.user__created_at__extract_quarter + , subq_2.user__created_at__extract_month + , subq_2.user__created_at__extract_day + , subq_2.user__created_at__extract_dow + , subq_2.user__created_at__extract_doy + , subq_2.user__ds_partitioned__day + , subq_2.user__ds_partitioned__week + , subq_2.user__ds_partitioned__month + , subq_2.user__ds_partitioned__quarter + , subq_2.user__ds_partitioned__year + , subq_2.user__ds_partitioned__extract_year + , subq_2.user__ds_partitioned__extract_quarter + , subq_2.user__ds_partitioned__extract_month + , subq_2.user__ds_partitioned__extract_day + , subq_2.user__ds_partitioned__extract_dow + , subq_2.user__ds_partitioned__extract_doy + , subq_2.user__last_profile_edit_ts__millisecond + , subq_2.user__last_profile_edit_ts__second + , subq_2.user__last_profile_edit_ts__minute + , subq_2.user__last_profile_edit_ts__hour + , subq_2.user__last_profile_edit_ts__day + , subq_2.user__last_profile_edit_ts__week + , subq_2.user__last_profile_edit_ts__month + , subq_2.user__last_profile_edit_ts__quarter + , subq_2.user__last_profile_edit_ts__year + , subq_2.user__last_profile_edit_ts__extract_year + , subq_2.user__last_profile_edit_ts__extract_quarter + , subq_2.user__last_profile_edit_ts__extract_month + , subq_2.user__last_profile_edit_ts__extract_day + , subq_2.user__last_profile_edit_ts__extract_dow + , subq_2.user__last_profile_edit_ts__extract_doy + , subq_2.user__bio_added_ts__second + , subq_2.user__bio_added_ts__minute + , subq_2.user__bio_added_ts__hour + , subq_2.user__bio_added_ts__day + , subq_2.user__bio_added_ts__week + , subq_2.user__bio_added_ts__month + , subq_2.user__bio_added_ts__quarter + , subq_2.user__bio_added_ts__year + , subq_2.user__bio_added_ts__extract_year + , subq_2.user__bio_added_ts__extract_quarter + , subq_2.user__bio_added_ts__extract_month + , subq_2.user__bio_added_ts__extract_day + , subq_2.user__bio_added_ts__extract_dow + , subq_2.user__bio_added_ts__extract_doy + , subq_2.user__last_login_ts__minute + , subq_2.user__last_login_ts__hour + , subq_2.user__last_login_ts__day + , subq_2.user__last_login_ts__week + , subq_2.user__last_login_ts__month + , subq_2.user__last_login_ts__quarter + , subq_2.user__last_login_ts__year + , subq_2.user__last_login_ts__extract_year + , subq_2.user__last_login_ts__extract_quarter + , subq_2.user__last_login_ts__extract_month + , subq_2.user__last_login_ts__extract_day + , subq_2.user__last_login_ts__extract_dow + , subq_2.user__last_login_ts__extract_doy + , subq_2.user__archived_at__hour + , subq_2.user__archived_at__day + , subq_2.user__archived_at__week + , subq_2.user__archived_at__month + , subq_2.user__archived_at__quarter + , subq_2.user__archived_at__year + , subq_2.user__archived_at__extract_year + , subq_2.user__archived_at__extract_quarter + , subq_2.user__archived_at__extract_month + , subq_2.user__archived_at__extract_day + , subq_2.user__archived_at__extract_dow + , subq_2.user__archived_at__extract_doy + , subq_2.created_at__day AS metric_time__day + , subq_2.created_at__week AS metric_time__week + , subq_2.created_at__month AS metric_time__month + , subq_2.created_at__quarter AS metric_time__quarter + , subq_2.created_at__year AS metric_time__year + , subq_2.created_at__extract_year AS metric_time__extract_year + , subq_2.created_at__extract_quarter AS metric_time__extract_quarter + , subq_2.created_at__extract_month AS metric_time__extract_month + , subq_2.created_at__extract_day AS metric_time__extract_day + , subq_2.created_at__extract_dow AS metric_time__extract_dow + , subq_2.created_at__extract_doy AS metric_time__extract_doy + , subq_2.user + , subq_2.home_state + , subq_2.user__home_state + , subq_2.new_users + FROM ( + -- Read Elements From Semantic Model 'users_ds_source' + SELECT + 1 AS new_users + , 1 AS archived_users + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , users_ds_source_src_28000.home_state AS user__home_state + , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , users_ds_source_src_28000.user_id AS user + FROM ***************************.dim_users users_ds_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + ( + subq_1.user = subq_4.user + ) AND ( + subq_1.ds_partitioned__day = subq_4.ds_partitioned__day + ) + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + GROUP BY + subq_6.user__home_state + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql new file mode 100644 index 0000000000..07faa02252 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql @@ -0,0 +1,34 @@ +test_name: test_partitioned_join +test_filename: test_query_rendering.py +docstring: + Tests converting a dataflow plan where there's a join on a partitioned dimension. +sql_engine: Clickhouse +--- +-- Join Standard Outputs +-- Pass Only Elements: ['identity_verifications', 'user__home_state'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + users_ds_source_src_28000.home_state AS user__home_state + , SUM(subq_9.identity_verifications) AS identity_verifications +FROM ( + -- Read Elements From Semantic Model 'id_verifications' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + , user_id AS user + , 1 AS identity_verifications + FROM ***************************.fct_id_verifications id_verifications_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +LEFT OUTER JOIN + ***************************.dim_users users_ds_source_src_28000 +ON + ( + subq_9.user = users_ds_source_src_28000.user_id + ) AND ( + subq_9.ds_partitioned__day = DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) + ) +GROUP BY + users_ds_source_src_28000.home_state +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql new file mode 100644 index 0000000000..a0b65cceed --- /dev/null +++ b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql @@ -0,0 +1,55 @@ +test_name: test_id_enumeration +test_filename: test_rendered_query.py +sql_engine: Clickhouse +--- +-- Combine Aggregated Outputs +SELECT + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) AS metric_time__day + , MAX(subq_4.bookings) AS bookings + , MAX(subq_9.listings) AS listings +FROM ( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_4 +FULL OUTER JOIN +( + -- Aggregate Measures + -- Compute Metrics via Expressions + SELECT + metric_time__day + , SUM(listings) AS listings + FROM ( + -- Read Elements From Semantic Model 'listings_latest' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['listings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', created_at) AS metric_time__day + , 1 AS listings + FROM ***************************.dim_listings_latest listings_latest_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +ON + subq_4.metric_time__day = subq_9.metric_time__day +GROUP BY + COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql new file mode 100644 index 0000000000..53f299b053 --- /dev/null +++ b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql @@ -0,0 +1,22 @@ +test_name: test_render_query +test_filename: test_rendered_query.py +sql_engine: Clickhouse +--- +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__day + , SUM(bookings) AS bookings +FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_10000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_2 +GROUP BY + metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql new file mode 100644 index 0000000000..8ab8657164 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test0 +SELECT + SUM(1) AS bookings +FROM demo.fct_bookings a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql new file mode 100644 index 0000000000..6c3705542c --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql @@ -0,0 +1,13 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test1 +SELECT + SUM(1) AS bookings + , b.country AS user__country + , c.country AS listing__country +FROM demo.fct_bookings a +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql new file mode 100644 index 0000000000..79bfeb6703 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql @@ -0,0 +1,17 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test2 +SELECT + SUM(1) AS bookings + , b.country AS user__country + , c.country AS listing__country +FROM demo.fct_bookings a +LEFT OUTER JOIN + demo.dim_users b +ON + a.user_id = b.user_id +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql new file mode 100644 index 0000000000..8439544252 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql @@ -0,0 +1,21 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test3 +SELECT + SUM(1) AS bookings + , b.country AS user__country + , c.country AS listing__country +FROM demo.fct_bookings a +LEFT OUTER JOIN + demo.dim_users b +ON + a.user_id = b.user_id +LEFT OUTER JOIN + demo.dim_listings c +ON + a.user_id = c.user_id +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql new file mode 100644 index 0000000000..2d6625ef18 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql @@ -0,0 +1,23 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test4 +SELECT + SUM(1) AS bookings + , b.country AS user__country + , c.country AS listing__country +FROM demo.fct_bookings a +LEFT OUTER JOIN + demo.dim_users b +ON + a.user_id = b.user_id +LEFT OUTER JOIN + demo.dim_listings c +ON + a.user_id = c.user_id +GROUP BY + b.country +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql new file mode 100644 index 0000000000..765fcc5b98 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql @@ -0,0 +1,24 @@ +test_name: test_component_rendering +test_filename: test_sql_plan_render.py +docstring: + Checks that all components of SELECT query are rendered for the 0, 1, >1 component count cases. +sql_engine: Clickhouse +--- +-- test5 +SELECT + SUM(1) AS bookings + , b.country AS user__country + , c.country AS listing__country +FROM demo.fct_bookings a +LEFT OUTER JOIN + demo.dim_users b +ON + a.user_id = b.user_id +LEFT OUTER JOIN + demo.dim_listings c +ON + a.user_id = c.user_id +GROUP BY + b.country + , c.country +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql new file mode 100644 index 0000000000..015491bf78 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql @@ -0,0 +1,12 @@ +test_name: test_render_create_table_as +test_filename: test_sql_plan_render.py +sql_engine: Clickhouse +--- +CREATE TABLE schema_name.table_name AS ( + -- select_0 + SELECT + a.bookings + FROM demo.fct_bookings a + LIMIT 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql new file mode 100644 index 0000000000..c0ec77b569 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql @@ -0,0 +1,12 @@ +test_name: test_render_create_table_as +test_filename: test_sql_plan_render.py +sql_engine: Clickhouse +--- +CREATE VIEW schema_name.table_name AS ( + -- select_0 + SELECT + a.bookings + FROM demo.fct_bookings a + LIMIT 1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql new file mode 100644 index 0000000000..de55c35e35 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql @@ -0,0 +1,10 @@ +test_name: test_render_limit +test_filename: test_sql_plan_render.py +sql_engine: Clickhouse +--- +-- test0 +SELECT + a.bookings +FROM demo.fct_bookings a +LIMIT 1 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql new file mode 100644 index 0000000000..428366c81b --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql @@ -0,0 +1,11 @@ +test_name: test_render_order_by +test_filename: test_sql_plan_render.py +sql_engine: Clickhouse +--- +-- test0 +SELECT + a.booking_value + , a.bookings +FROM demo.fct_bookings a +ORDER BY a.booking_value, a.bookings DESC +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql new file mode 100644 index 0000000000..cea4c66e20 --- /dev/null +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql @@ -0,0 +1,10 @@ +test_name: test_render_where +test_filename: test_sql_plan_render.py +sql_engine: Clickhouse +--- +-- test0 +SELECT + a.booking_value +FROM demo.fct_bookings a +WHERE a.booking_value > 100 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql new file mode 100644 index 0000000000..341988b32e --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql @@ -0,0 +1,404 @@ +test_name: test_join_to_time_spine_with_input_measure_constraint +test_filename: test_time_spine_join_rendering.py +docstring: + Check filter hierarchy. + + Ensure that the measure filter 'booking__is_instant' doesn't get applied again post-aggregation. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.booking__is_instant + , subq_9.bookings AS instant_bookings_with_measure_filter +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Constrain Output with WHERE + SELECT + subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + , subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE metric_time__day > '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , subq_3.booking__is_instant + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.booking__is_instant + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + , subq_3.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..3f7961f264 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql @@ -0,0 +1,59 @@ +test_name: test_join_to_time_spine_with_input_measure_constraint +test_filename: test_time_spine_join_rendering.py +docstring: + Check filter hierarchy. + + Ensure that the measure filter 'booking__is_instant' doesn't get applied again post-aggregation. +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + subq_18.metric_time__day AS metric_time__day + , subq_14.booking__is_instant AS booking__is_instant + , subq_14.bookings AS instant_bookings_with_measure_filter +FROM ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['metric_time__day',] + SELECT + metric_time__day + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_16 + WHERE metric_time__day > '2020-01-01' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_18 +LEFT OUTER JOIN +( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , booking__is_instant + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') + GROUP BY + metric_time__day + , booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_14 +ON + subq_18.metric_time__day = subq_14.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql new file mode 100644 index 0000000000..91093bc376 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql @@ -0,0 +1,405 @@ +test_name: test_join_to_time_spine_with_queried_time_constraint +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric that fills nulls is queried with metric time and a time constraint. Should apply constraint twice. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_10.metric_time__day + , COALESCE(subq_10.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_9.metric_time__day + , subq_9.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_8.metric_time__day AS metric_time__day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_7.metric_time__day + FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_6.ds__week + , subq_6.ds__month + , subq_6.ds__quarter + , subq_6.ds__year + , subq_6.ds__extract_year + , subq_6.ds__extract_quarter + , subq_6.ds__extract_month + , subq_6.ds__extract_day + , subq_6.ds__extract_dow + , subq_6.ds__extract_doy + , subq_6.ds__martian_day + , subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + WHERE subq_6.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_8.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_9 + WHERE subq_9.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_10 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql new file mode 100644 index 0000000000..51a16da5d3 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql @@ -0,0 +1,55 @@ +test_name: test_join_to_time_spine_with_queried_time_constraint +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric that fills nulls is queried with metric time and a time constraint. Should apply constraint twice. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + SELECT + subq_19.metric_time__day AS metric_time__day + , subq_15.bookings AS bookings + FROM ( + -- Read From Time Spine 'mf_time_spine' + -- Change Column Aliases + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + -- Pass Only Elements: ['metric_time__day',] + SELECT + ds AS metric_time__day + FROM ***************************.mf_time_spine time_spine_src_28006 + WHERE ds BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_19 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_15 + ON + subq_19.metric_time__day = subq_15.metric_time__day + WHERE subq_19.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_21 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql new file mode 100644 index 0000000000..77e3dca0b6 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql @@ -0,0 +1,273 @@ +test_name: test_simple_join_to_time_spine +test_filename: test_time_spine_join_rendering.py +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__day + , subq_7.bookings AS bookings_join_to_time_spine +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_6.metric_time__day AS metric_time__day + , subq_3.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_5.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_4.ds__day AS metric_time__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_2.metric_time__day + , SUM(subq_2.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_1.metric_time__day + , subq_1.bookings + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + GROUP BY + subq_2.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + ON + subq_6.metric_time__day = subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_7 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql new file mode 100644 index 0000000000..37cf418f3d --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql @@ -0,0 +1,33 @@ +test_name: test_simple_join_to_time_spine +test_filename: test_time_spine_join_rendering.py +sql_engine: Clickhouse +--- +-- Join to Time Spine Dataset +-- Compute Metrics via Expressions +SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_11.bookings AS bookings_join_to_time_spine +FROM ***************************.mf_time_spine time_spine_src_28006 +LEFT OUTER JOIN +( + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_11 +ON + time_spine_src_28006.ds = subq_11.metric_time__day +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql new file mode 100644 index 0000000000..b25cd72fb3 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql @@ -0,0 +1,379 @@ +test_name: test_simple_join_to_time_spine_with_filter +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric fills nulls and filter is not in group by. Should apply constraint once. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_8.metric_time__day + , COALESCE(subq_8.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + subq_7.metric_time__day AS metric_time__day + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_7.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_8 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql new file mode 100644 index 0000000000..2849d09fda --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql @@ -0,0 +1,44 @@ +test_name: test_simple_join_to_time_spine_with_filter +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric fills nulls and filter is not in group by. Should apply constraint once. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_13.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_10 + WHERE booking__is_instant + GROUP BY + metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_13 + ON + time_spine_src_28006.ds = subq_13.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_17 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql new file mode 100644 index 0000000000..5bbe9cd044 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql @@ -0,0 +1,393 @@ +test_name: test_simple_join_to_time_spine_with_queried_filter +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric fills nulls and filter is in group by. Should apply constraint twice. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + subq_9.metric_time__day + , subq_9.booking__is_instant + , COALESCE(subq_9.bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Constrain Output with WHERE + SELECT + subq_8.metric_time__day + , subq_8.booking__is_instant + , subq_8.bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + subq_7.metric_time__day AS metric_time__day + , subq_4.booking__is_instant AS booking__is_instant + , subq_4.bookings AS bookings + FROM ( + -- Pass Only Elements: ['metric_time__day',] + SELECT + subq_6.metric_time__day + FROM ( + -- Change Column Aliases + SELECT + subq_5.ds__day AS metric_time__day + , subq_5.ds__week + , subq_5.ds__month + , subq_5.ds__quarter + , subq_5.ds__year + , subq_5.ds__extract_year + , subq_5.ds__extract_quarter + , subq_5.ds__extract_month + , subq_5.ds__extract_day + , subq_5.ds__extract_dow + , subq_5.ds__extract_doy + , subq_5.ds__martian_day + FROM ( + -- Read From Time Spine 'mf_time_spine' + SELECT + time_spine_src_28006.ds AS ds__day + , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week + , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month + , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter + , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year + , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , time_spine_src_28006.martian_day AS ds__martian_day + FROM ***************************.mf_time_spine time_spine_src_28006 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_5 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_6 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_7 + LEFT OUTER JOIN + ( + -- Aggregate Measures + SELECT + subq_3.metric_time__day + , subq_3.booking__is_instant + , SUM(subq_3.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + SELECT + subq_2.metric_time__day + , subq_2.booking__is_instant + , subq_2.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_1.ds__day + , subq_1.ds__week + , subq_1.ds__month + , subq_1.ds__quarter + , subq_1.ds__year + , subq_1.ds__extract_year + , subq_1.ds__extract_quarter + , subq_1.ds__extract_month + , subq_1.ds__extract_day + , subq_1.ds__extract_dow + , subq_1.ds__extract_doy + , subq_1.ds_partitioned__day + , subq_1.ds_partitioned__week + , subq_1.ds_partitioned__month + , subq_1.ds_partitioned__quarter + , subq_1.ds_partitioned__year + , subq_1.ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy + , subq_1.paid_at__day + , subq_1.paid_at__week + , subq_1.paid_at__month + , subq_1.paid_at__quarter + , subq_1.paid_at__year + , subq_1.paid_at__extract_year + , subq_1.paid_at__extract_quarter + , subq_1.paid_at__extract_month + , subq_1.paid_at__extract_day + , subq_1.paid_at__extract_dow + , subq_1.paid_at__extract_doy + , subq_1.booking__ds__day + , subq_1.booking__ds__week + , subq_1.booking__ds__month + , subq_1.booking__ds__quarter + , subq_1.booking__ds__year + , subq_1.booking__ds__extract_year + , subq_1.booking__ds__extract_quarter + , subq_1.booking__ds__extract_month + , subq_1.booking__ds__extract_day + , subq_1.booking__ds__extract_dow + , subq_1.booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day + , subq_1.booking__paid_at__week + , subq_1.booking__paid_at__month + , subq_1.booking__paid_at__quarter + , subq_1.booking__paid_at__year + , subq_1.booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy + , subq_1.metric_time__day + , subq_1.metric_time__week + , subq_1.metric_time__month + , subq_1.metric_time__quarter + , subq_1.metric_time__year + , subq_1.metric_time__extract_year + , subq_1.metric_time__extract_quarter + , subq_1.metric_time__extract_month + , subq_1.metric_time__extract_day + , subq_1.metric_time__extract_dow + , subq_1.metric_time__extract_doy + , subq_1.listing + , subq_1.guest + , subq_1.host + , subq_1.booking__listing + , subq_1.booking__guest + , subq_1.booking__host + , subq_1.is_instant + , subq_1.booking__is_instant + , subq_1.bookings + , subq_1.instant_bookings + , subq_1.booking_value + , subq_1.max_booking_value + , subq_1.min_booking_value + , subq_1.bookers + , subq_1.average_booking_value + , subq_1.referred_bookings + , subq_1.median_booking_value + , subq_1.booking_value_p99 + , subq_1.discrete_booking_value_p99 + , subq_1.approximate_continuous_booking_value_p99 + , subq_1.approximate_discrete_booking_value_p99 + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.max_booking_value + , subq_0.min_booking_value + , subq_0.bookers + , subq_0.average_booking_value + , subq_0.referred_bookings + , subq_0.median_booking_value + , subq_0.booking_value_p99 + , subq_0.discrete_booking_value_p99 + , subq_0.approximate_continuous_booking_value_p99 + , subq_0.approximate_discrete_booking_value_p99 + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_28000.booking_value + , bookings_source_src_28000.booking_value AS max_booking_value + , bookings_source_src_28000.booking_value AS min_booking_value + , bookings_source_src_28000.guest_id AS bookers + , bookings_source_src_28000.booking_value AS average_booking_value + , bookings_source_src_28000.booking_value AS booking_payments + , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings + , bookings_source_src_28000.booking_value AS median_booking_value + , bookings_source_src_28000.booking_value AS booking_value_p99 + , bookings_source_src_28000.booking_value AS discrete_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 + , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 + , bookings_source_src_28000.is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , bookings_source_src_28000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_28000.listing_id AS listing + , bookings_source_src_28000.guest_id AS guest + , bookings_source_src_28000.host_id AS host + , bookings_source_src_28000.listing_id AS booking__listing + , bookings_source_src_28000.guest_id AS booking__guest + , bookings_source_src_28000.host_id AS booking__host + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_0 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_1 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_2 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_3 + GROUP BY + subq_3.metric_time__day + , subq_3.booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_4 + ON + subq_7.metric_time__day = subq_4.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_8 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_9 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql new file mode 100644 index 0000000000..acfdc14168 --- /dev/null +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql @@ -0,0 +1,57 @@ +test_name: test_simple_join_to_time_spine_with_queried_filter +test_filename: test_time_spine_join_rendering.py +docstring: + Test case where metric fills nulls and filter is in group by. Should apply constraint twice. +sql_engine: Clickhouse +--- +-- Compute Metrics via Expressions +SELECT + metric_time__day + , booking__is_instant + , COALESCE(bookings, 0) AS bookings_fill_nulls_with_0 +FROM ( + -- Constrain Output with WHERE + SELECT + metric_time__day + , booking__is_instant + , bookings + FROM ( + -- Join to Time Spine Dataset + SELECT + time_spine_src_28006.ds AS metric_time__day + , subq_14.booking__is_instant AS booking__is_instant + , subq_14.bookings AS bookings + FROM ***************************.mf_time_spine time_spine_src_28006 + LEFT OUTER JOIN + ( + -- Constrain Output with WHERE + -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] + -- Aggregate Measures + SELECT + metric_time__day + , booking__is_instant + , SUM(bookings) AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , is_instant AS booking__is_instant + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_28000 + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_11 + WHERE booking__is_instant + GROUP BY + metric_time__day + , booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_14 + ON + time_spine_src_28006.ds = subq_14.metric_time__day + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ) subq_18 + WHERE booking__is_instant + SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +) subq_19 +SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/source_schema_tools.py b/tests_metricflow/source_schema_tools.py index 0a8e655225..69578224f1 100644 --- a/tests_metricflow/source_schema_tools.py +++ b/tests_metricflow/source_schema_tools.py @@ -59,7 +59,7 @@ def populate_source_schema( schema_name = mf_test_configuration.mf_source_schema logger.debug(LazyFormat(lambda: f"Dropping schema {schema_name}")) - ddl_sql_client.drop_schema(schema_name=schema_name, cascade=True) + # ddl_sql_client.drop_schema(schema_name=schema_name, cascade=True) # TODO: this is breaking for clickhouse logger.debug(LazyFormat(lambda: f"Creating schema {schema_name}")) ddl_sql_client.create_schema(schema_name=schema_name) create_tables_listed_in_table_snapshot_repository( From 3a3d7cc7f560921d0bb3a39187a2c7a89ae47626 Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Mon, 13 Jan 2025 14:43:52 -0300 Subject: [PATCH 2/6] Fix lint issues --- Makefile | 4 ++ metricflow/protocols/sql_client.py | 4 +- metricflow/sql/render/clickhouse.py | 51 +++---------------- .../sql_clients/adapter_backed_ddl_client.py | 4 +- .../test_saved_query__cli_output.txt | 40 --------------- ...ery_with_cumulative_metric__cli_output.txt | 34 ------------- ...est_saved_query_with_limit__cli_output.txt | 41 --------------- ...est_saved_query_with_where__cli_output.txt | 40 --------------- 8 files changed, 17 insertions(+), 201 deletions(-) diff --git a/Makefile b/Makefile index 0a48dd40c4..8c051b8052 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,10 @@ test-trino: test-clickhouse: hatch -v run clickhouse-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ +.PHONY: populate-persistent-source-schema-clickhouse +populate-persistent-source-schema-clickhouse: + hatch -v run clickhouse-env:pytest -vv $(ADDITIONAL_PYTEST_OPTIONS) $(USE_PERSISTENT_SOURCE_SCHEMA) $(POPULATE_PERSISTENT_SOURCE_SCHEMA) + .PHONY: lint lint: hatch -v run dev-env:pre-commit run --all-files diff --git a/metricflow/protocols/sql_client.py b/metricflow/protocols/sql_client.py index 00ddc749a5..353fe7f018 100644 --- a/metricflow/protocols/sql_client.py +++ b/metricflow/protocols/sql_client.py @@ -51,7 +51,9 @@ def unsupported_granularities(self) -> Set[TimeGranularity]: elif self is SqlEngine.TRINO: return {TimeGranularity.NANOSECOND, TimeGranularity.MICROSECOND} elif self is SqlEngine.CLICKHOUSE: - return set() # TODO: it looks like clickhouse supports nanoseconds (https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions#date_trunc) + return ( + set() + ) # TODO: it looks like clickhouse supports nanoseconds (https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions#date_trunc) else: assert_values_exhausted(self) diff --git a/metricflow/sql/render/clickhouse.py b/metricflow/sql/render/clickhouse.py index e93be4ef11..0401bceadd 100644 --- a/metricflow/sql/render/clickhouse.py +++ b/metricflow/sql/render/clickhouse.py @@ -6,9 +6,6 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.sql.render.rendering_constants import SqlRenderingConstants -from metricflow.sql.sql_plan import SqlJoinDescription from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameterSet from metricflow_semantics.sql.sql_exprs import ( @@ -19,7 +16,7 @@ SqlIntegerExpression, SqlPercentileExpression, SqlPercentileFunctionType, - SqlSubtractTimeIntervalExpression, SqlExpressionNode, + SqlSubtractTimeIntervalExpression, ) from typing_extensions import override @@ -29,7 +26,9 @@ SqlExpressionRenderer, SqlExpressionRenderResult, ) +from metricflow.sql.render.rendering_constants import SqlRenderingConstants from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlPlanRenderResult +from metricflow.sql.sql_plan import SqlJoinDescription class ClickhouseSqlExpressionRenderer(DefaultSqlExpressionRenderer): @@ -175,15 +174,9 @@ def expr_renderer(self) -> SqlExpressionRenderer: @override def _render_adapter_specific_flags(self) -> Optional[SqlPlanRenderResult]: """Add ClickHouse-specific query settings.""" - settings = [ - "allow_experimental_join_condition = 1", - "allow_experimental_analyzer = 1", - "join_use_nulls = 0" - ] - return SqlPlanRenderResult( - sql=f"SETTINGS {', '.join(settings)}", - bind_parameter_set=SqlBindParameterSet() - ) + settings = ["allow_experimental_join_condition = 1", "allow_experimental_analyzer = 1", "join_use_nulls = 0"] + return SqlPlanRenderResult(sql=f"SETTINGS {', '.join(settings)}", bind_parameter_set=SqlBindParameterSet()) + def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: """Convert the join descriptions into a "JOIN" section with ClickHouse-specific handling.""" if len(join_descriptions) == 0: @@ -205,7 +198,7 @@ def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) # Check if this is a time-range join is_time_range_join = False if on_condition_rendered: - is_time_range_join = any(op in on_condition_rendered.sql for op in ['<=', '>=', '<', '>']) + is_time_range_join = any(op in on_condition_rendered.sql for op in ["<=", ">=", "<", ">"]) # Add join type join_section_lines.append(join_description.join_type.value) @@ -244,33 +237,3 @@ def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) self._stored_where_conditions = where_conditions return SqlPlanRenderResult("\n".join(join_section_lines), params) - -@override -def _render_where(self, where_expression: Optional[SqlExpressionNode]) -> Optional[SqlPlanRenderResult]: - """Override to combine stored where conditions from joins with the main where clause.""" - original_where = super()._render_where(where_expression) - stored_conditions = getattr(self, '_stored_where_conditions', []) - - if not stored_conditions and not original_where: - return None - - conditions = [] - - # Add original where condition if it exists - if original_where: - # Strip the "WHERE" prefix if it exists - where_sql = original_where.sql - if where_sql.upper().startswith('WHERE '): - where_sql = where_sql[6:] - conditions.append(where_sql) - - # Add stored conditions from joins - conditions.extend(stored_conditions) - - # Combine all conditions with AND - combined_sql = ' AND '.join(f'({condition})' for condition in conditions if condition.strip()) - - return SqlPlanRenderResult( - sql=f"WHERE {combined_sql}", - bind_parameter_set=original_where.bind_parameter_set if original_where else SqlBindParameterSet(), - ) \ No newline at end of file diff --git a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py index 718b54d3b4..614a50147a 100644 --- a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py +++ b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py @@ -49,7 +49,9 @@ def create_table_from_data_table( create_table_statement = f"CREATE TABLE IF NOT EXISTS {sql_table.sql} ({', '.join(columns_to_insert)})" if self.sql_engine_type == SqlEngine.CLICKHOUSE: - create_table_statement = f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(" ")[0]})" + create_table_statement = ( + f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(" ")[0]})" + ) self._adapter.execute( create_table_statement, diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt index 12a7d2327f..dbb69a4fe1 100644 --- a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query__cli_output.txt @@ -1,46 +1,6 @@ test_name: test_saved_query test_filename: test_cli.py --- --- Constrain Output with WHERE --- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] --- Aggregate Measures --- Compute Metrics via Expressions --- Order By ['metric_time__day', 'listing__capacity_latest'] -SELECT - metric_time__day - , listing__capacity_latest - , SUM(bookings) AS bookings - , SUM(instant_bookings) AS instant_bookings -FROM ( - -- Join Standard Outputs - SELECT - listings_latest_src_10000.capacity AS listing__capacity_latest - , subq_1.metric_time__day AS metric_time__day - , subq_1.bookings AS bookings - , subq_1.instant_bookings AS instant_bookings - FROM ( - -- Read Elements From Semantic Model 'bookings_source' - -- Metric Time Dimension 'ds' - SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , listing_id AS listing - , 1 AS bookings - , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings - FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 - ) subq_1 - LEFT OUTER JOIN - ***************************.dim_listings_latest listings_latest_src_10000 - ON - subq_1.listing = listings_latest_src_10000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 -) subq_5 -WHERE listing__capacity_latest > 3 -GROUP BY - metric_time__day - , listing__capacity_latest -ORDER BY metric_time__day, listing__capacity_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 metric_time__day listing__capacity_latest bookings instant_bookings ------------------- -------------------------- ---------- ------------------ 2019-12-01T00:00:00 5 1 0 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt index f4f63c8416..228f259ccb 100644 --- a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_cumulative_metric__cli_output.txt @@ -1,40 +1,6 @@ test_name: test_saved_query_with_cumulative_metric test_filename: test_cli.py --- --- Join Self Over Time Range --- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] --- Pass Only Elements: ['txn_revenue', 'metric_time__day'] --- Aggregate Measures --- Compute Metrics via Expressions --- Order By ['metric_time__day'] -SELECT - subq_3.metric_time__day AS metric_time__day - , SUM(subq_2.txn_revenue) AS trailing_2_months_revenue -FROM ( - -- Read From Time Spine 'mf_time_spine' - SELECT - ds AS metric_time__day - FROM ***************************.mf_time_spine subq_4 - WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 -) subq_3 -CROSS JOIN -( - -- Read Elements From Semantic Model 'revenue' - -- Metric Time Dimension 'ds' - -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] - SELECT - DATE_TRUNC('day', created_at) AS metric_time__day - , revenue AS txn_revenue - FROM ***************************.fct_revenue revenue_src_10000 - WHERE DATE_TRUNC('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 -) subq_2 -WHERE subq_3.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' -GROUP BY - subq_3.metric_time__day -ORDER BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 metric_time__day trailing_2_months_revenue ------------------- --------------------------- 2020-01-01T00:00:00 1000 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt index eb0196495f..246959c21c 100644 --- a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_limit__cli_output.txt @@ -1,47 +1,6 @@ test_name: test_saved_query_with_limit test_filename: test_cli.py --- --- Constrain Output with WHERE --- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] --- Aggregate Measures --- Compute Metrics via Expressions --- Order By ['metric_time__day', 'listing__capacity_latest'] Limit 3 -SELECT - metric_time__day - , listing__capacity_latest - , SUM(bookings) AS bookings - , SUM(instant_bookings) AS instant_bookings -FROM ( - -- Join Standard Outputs - SELECT - listings_latest_src_10000.capacity AS listing__capacity_latest - , subq_1.metric_time__day AS metric_time__day - , subq_1.bookings AS bookings - , subq_1.instant_bookings AS instant_bookings - FROM ( - -- Read Elements From Semantic Model 'bookings_source' - -- Metric Time Dimension 'ds' - SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , listing_id AS listing - , 1 AS bookings - , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings - FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 - ) subq_1 - LEFT OUTER JOIN - ***************************.dim_listings_latest listings_latest_src_10000 - ON - subq_1.listing = listings_latest_src_10000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 -) subq_5 -WHERE listing__capacity_latest > 3 -GROUP BY - metric_time__day - , listing__capacity_latest -ORDER BY metric_time__day, listing__capacity_latest -LIMIT 3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 metric_time__day listing__capacity_latest bookings instant_bookings ------------------- -------------------------- ---------- ------------------ 2019-12-01T00:00:00 5 1 0 diff --git a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt index 7b139fba5d..cc8f869e80 100644 --- a/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt +++ b/tests_metricflow/snapshots/test_cli.py/str/Clickhouse/test_saved_query_with_where__cli_output.txt @@ -1,46 +1,6 @@ test_name: test_saved_query_with_where test_filename: test_cli.py --- --- Constrain Output with WHERE --- Pass Only Elements: ['bookings', 'instant_bookings', 'listing__capacity_latest', 'metric_time__day'] --- Aggregate Measures --- Compute Metrics via Expressions --- Order By ['metric_time__day', 'listing__capacity_latest'] -SELECT - metric_time__day - , listing__capacity_latest - , SUM(bookings) AS bookings - , SUM(instant_bookings) AS instant_bookings -FROM ( - -- Join Standard Outputs - SELECT - listings_latest_src_10000.capacity AS listing__capacity_latest - , subq_1.metric_time__day AS metric_time__day - , subq_1.bookings AS bookings - , subq_1.instant_bookings AS instant_bookings - FROM ( - -- Read Elements From Semantic Model 'bookings_source' - -- Metric Time Dimension 'ds' - SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , listing_id AS listing - , 1 AS bookings - , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings - FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 - ) subq_1 - LEFT OUTER JOIN - ***************************.dim_listings_latest listings_latest_src_10000 - ON - subq_1.listing = listings_latest_src_10000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 -) subq_5 -WHERE (listing__capacity_latest > 3) AND (listing__capacity_latest > 4) -GROUP BY - metric_time__day - , listing__capacity_latest -ORDER BY metric_time__day, listing__capacity_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 metric_time__day listing__capacity_latest bookings instant_bookings ------------------- -------------------------- ---------- ------------------ 2019-12-01T00:00:00 5 1 0 From d7b3f8895ab93546c41bf14344a04fd928db9fa9 Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Mon, 13 Jan 2025 14:54:20 -0300 Subject: [PATCH 3/6] fix f-string format on python 3.9 --- .../fixtures/sql_clients/adapter_backed_ddl_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py index 614a50147a..33a53c1fc0 100644 --- a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py +++ b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py @@ -50,7 +50,7 @@ def create_table_from_data_table( if self.sql_engine_type == SqlEngine.CLICKHOUSE: create_table_statement = ( - f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(" ")[0]})" + f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(' ')[0]})" ) self._adapter.execute( From cd677bcd1470ba6f20ea407a65aff5ee613b8f05 Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Tue, 14 Jan 2025 15:10:49 -0300 Subject: [PATCH 4/6] Update to use new version of clickhouse --- local-data-warehouses/clickhouse/config.xml | 6 + .../clickhouse/docker-compose.yaml | 4 +- metricflow/protocols/sql_client.py | 4 +- metricflow/sql/render/clickhouse.py | 345 +++++-- metricflow/sql/render/sql_plan_renderer.py | 4 - .../test_cases/itest_cumulative_metric.yaml | 4 +- .../test_cases/itest_granularity.yaml | 2 +- .../integration/test_configured_cases.py | 1 + .../test_conversion_metric__plan0.sql | 192 ++-- ...est_conversion_metric__plan0_optimized.sql | 28 +- ..._metric_with_categorical_filter__plan0.sql | 198 ++-- ...th_categorical_filter__plan0_optimized.sql | 30 +- ...different_time_dimension_grains__plan0.sql | 188 ++-- ...time_dimension_grains__plan0_optimized.sql | 26 +- ...t_conversion_metric_with_filter__plan0.sql | 186 ++-- ...on_metric_with_filter__plan0_optimized.sql | 25 +- ...ric_with_filter_not_in_group_by__plan0.sql | 190 ++-- ...ilter_not_in_group_by__plan0_optimized.sql | 29 +- ...ion_metric_with_time_constraint__plan0.sql | 194 ++-- ..._with_time_constraint__plan0_optimized.sql | 30 +- ...t_conversion_metric_with_window__plan0.sql | 196 ++-- ...on_metric_with_window__plan0_optimized.sql | 32 +- ...with_window_and_time_constraint__plan0.sql | 204 ++-- ...w_and_time_constraint__plan0_optimized.sql | 36 +- .../test_conversion_metric__query_output.txt | 16 +- ..._with_categorical_filter__query_output.txt | 6 +- ...h_filter_not_in_group_by__query_output.txt | 2 +- ...ric_with_time_constraint__query_output.txt | 2 +- ...rsion_metric_with_window__query_output.txt | 16 +- ...ndow_and_time_constraint__query_output.txt | 4 +- ...nversion_count_with_no_group_by__plan0.sql | 188 ++-- ...ount_with_no_group_by__plan0_optimized.sql | 26 +- ...timespine_and_fill_nulls_with_0__plan0.sql | 248 +++-- ...and_fill_nulls_with_0__plan0_optimized.sql | 38 +- .../test_conversion_rate__plan0.sql | 190 ++-- .../test_conversion_rate__plan0_optimized.sql | 25 +- ...n_rate_with_constant_properties__plan0.sql | 202 ++-- ...h_constant_properties__plan0_optimized.sql | 33 +- ...onversion_rate_with_no_group_by__plan0.sql | 188 ++-- ...rate_with_no_group_by__plan0_optimized.sql | 26 +- ...est_conversion_rate_with_window__plan0.sql | 200 ++-- ...sion_rate_with_window__plan0_optimized.sql | 31 +- ...st_convert_query_semantic_model__plan0.sql | 45 +- ...le_semantic_model_with_measures__plan0.sql | 89 +- ...semantic_model_without_measures__plan0.sql | 45 +- ..._metric_with_non_default_grains__plan0.sql | 74 +- ...th_non_default_grains__plan0_optimized.sql | 19 +- .../test_cumulative_metric__plan0.sql | 51 +- ...est_cumulative_metric__plan0_optimized.sql | 5 +- ...cumulative_metric_grain_to_date__plan0.sql | 51 +- ..._metric_grain_to_date__plan0_optimized.sql | 5 +- .../test_cumulative_metric_no_ds__plan0.sql | 49 +- ...mulative_metric_no_ds__plan0_optimized.sql | 1 - ...est_cumulative_metric_no_window__plan0.sql | 51 +- ...tive_metric_no_window__plan0_optimized.sql | 5 +- ..._no_window_with_time_constraint__plan0.sql | 60 +- ..._with_time_constraint__plan0_optimized.sql | 14 +- ...c_with_agg_time_and_metric_time__plan0.sql | 66 +- ..._time_and_metric_time__plan0_optimized.sql | 15 +- ..._metric_with_agg_time_dimension__plan0.sql | 62 +- ...th_agg_time_dimension__plan0_optimized.sql | 11 +- ...th_multiple_agg_time_dimensions__plan0.sql | 66 +- ...e_agg_time_dimensions__plan0_optimized.sql | 15 +- ...multiple_metric_time_dimensions__plan0.sql | 66 +- ...etric_time_dimensions__plan0_optimized.sql | 15 +- ...with_non_adjustable_time_filter__plan0.sql | 151 ++- ...djustable_time_filter__plan0_optimized.sql | 10 +- ...e_metric_with_non_default_grain__plan0.sql | 68 +- ...ith_non_default_grain__plan0_optimized.sql | 15 +- ...ive_metric_with_time_constraint__plan0.sql | 64 +- ..._with_time_constraint__plan0_optimized.sql | 18 +- ..._metric_with_non_default_grains__plan0.sql | 73 +- ...th_non_default_grains__plan0_optimized.sql | 18 +- ...e_metric_with_non_default_grain__plan0.sql | 72 +- ...ith_non_default_grain__plan0_optimized.sql | 17 +- ..._metric_with_non_default_grains__plan0.sql | 78 +- ...th_non_default_grains__plan0_optimized.sql | 21 +- ...w_metric_with_non_default_grain__plan0.sql | 72 +- ...ith_non_default_grain__plan0_optimized.sql | 17 +- ..._metric_with_non_default_grains__plan0.sql | 221 +++-- ...th_non_default_grains__plan0_optimized.sql | 47 +- ...th_non_adjustable_filter__query_output.txt | 4 +- ...o_date_cumulative_metric__query_output.txt | 2 +- ...tiple_cumulative_metrics__query_output.txt | 124 +-- ...ditive_cumulative_metric__query_output.txt | 5 +- ...simple_cumulative_metric__query_output.txt | 180 ++-- ..._metric_with_custom_granularity__plan0.sql | 194 ++-- ...th_custom_granularity__plan0_optimized.sql | 32 +- ..._with_custom_granularity_filter__plan0.sql | 196 ++-- ...om_granularity_filter__plan0_optimized.sql | 32 +- ...nularity_filter_not_in_group_by__plan0.sql | 190 ++-- ...ilter_not_in_group_by__plan0_optimized.sql | 29 +- ..._metric_with_custom_granularity__plan0.sql | 70 +- ...th_custom_granularity__plan0_optimized.sql | 15 +- ..._metric_with_custom_granularity__plan0.sql | 285 +++--- ...th_custom_granularity__plan0_optimized.sql | 6 +- ..._metric_grouped_by_custom_grain__plan0.sql | 172 ++-- ...ouped_by_custom_grain__plan0_optimized.sql | 13 +- ..._with_custom_granularity_filter__plan0.sql | 178 ++-- ...om_granularity_filter__plan0_optimized.sql | 11 +- ...nularity_filter_not_in_group_by__plan0.sql | 174 ++-- ...ilter_not_in_group_by__plan0_optimized.sql | 11 +- ...ity_joined_to_non_default_grain__plan0.sql | 97 +- ..._to_non_default_grain__plan0_optimized.sql | 10 +- ...metrics_with_custom_granularity__plan0.sql | 240 +++-- ...th_custom_granularity__plan0_optimized.sql | 18 +- ...ity_joined_to_non_default_grain__plan0.sql | 385 ++++---- ..._to_non_default_grain__plan0_optimized.sql | 13 +- ..._custom_granularity_metric_time__plan0.sql | 25 +- ...anularity_metric_time__plan0_optimized.sql | 3 +- ...tom_granularity_non_metric_time__plan0.sql | 138 ++- ...arity_non_metric_time__plan0_optimized.sql | 5 +- ..._with_custom_granularity_filter__plan0.sql | 95 +- ...om_granularity_filter__plan0_optimized.sql | 6 +- ...nularity_in_filter_and_group_by__plan0.sql | 95 +- ...n_filter_and_group_by__plan0_optimized.sql | 4 +- ..._metric_with_custom_granularity__plan0.sql | 169 ++-- ...th_custom_granularity__plan0_optimized.sql | 12 +- ...nularity_filter_not_in_group_by__plan0.sql | 170 ++-- ...ilter_not_in_group_by__plan0_optimized.sql | 11 +- ..._metric_with_custom_granularity__plan0.sql | 139 ++- ...th_custom_granularity__plan0_optimized.sql | 6 +- ...ith_custom_granularity_and_join__plan0.sql | 234 +++-- ..._granularity_and_join__plan0_optimized.sql | 6 +- ..._with_custom_granularity_filter__plan0.sql | 138 ++- ...om_granularity_filter__plan0_optimized.sql | 5 +- ...nularity_in_filter_and_group_by__plan0.sql | 140 ++- ...n_filter_and_group_by__plan0_optimized.sql | 5 +- ...th_multi_hop_custom_granularity__plan0.sql | 589 ++++++------ ...op_custom_granularity__plan0_optimized.sql | 14 +- .../test_build_metric_tasks__query0.sql | 4 +- .../test_build_saved_query_tasks__query0.sql | 5 +- .../test_combine_output_node__plan0.sql | 280 +++--- ...t_combine_output_node__plan0_optimized.sql | 9 +- .../test_compute_metrics_node__plan0.sql | 234 +++-- ..._compute_metrics_node__plan0_optimized.sql | 6 +- ...o_from_multiple_semantic_models__plan0.sql | 437 +++++---- ...tiple_semantic_models__plan0_optimized.sql | 26 +- ...atio_from_single_semantic_model__plan0.sql | 234 +++-- ...single_semantic_model__plan0_optimized.sql | 7 +- ...ompute_metrics_node_simple_expr__plan0.sql | 234 +++-- ...rics_node_simple_expr__plan0_optimized.sql | 6 +- .../test_constrain_time_range_node__plan0.sql | 136 ++- ...train_time_range_node__plan0_optimized.sql | 7 +- ...on_with_joined_where_constraint__plan0.sql | 143 ++- ...ined_where_constraint__plan0_optimized.sql | 2 - .../test_dimensions_requiring_join__plan0.sql | 144 ++- ...nsions_requiring_join__plan0_optimized.sql | 5 +- .../Clickhouse/test_filter_node__plan0.sql | 134 ++- .../test_filter_node__plan0_optimized.sql | 1 - ...lter_with_where_constraint_node__plan0.sql | 135 ++- ...where_constraint_node__plan0_optimized.sql | 4 +- .../test_measure_aggregation_node__plan0.sql | 135 ++- ...sure_aggregation_node__plan0_optimized.sql | 1 - .../test_multi_join_node__plan0.sql | 321 ++++--- .../test_multi_join_node__plan0_optimized.sql | 11 +- .../Clickhouse/test_order_by_node__plan0.sql | 141 ++- .../test_order_by_node__plan0_optimized.sql | 4 +- .../test_semi_additive_join_node__plan0.sql | 143 ++- ...mi_additive_join_node__plan0_optimized.sql | 76 +- ...dditive_join_node_with_grouping__plan0.sql | 145 ++- ...in_node_with_grouping__plan0_optimized.sql | 78 +- ...join_node_with_queried_group_by__plan0.sql | 145 ++- ...with_queried_group_by__plan0_optimized.sql | 80 +- .../test_single_join_node__plan0.sql | 228 +++-- ...test_single_join_node__plan0_optimized.sql | 2 - .../Clickhouse/test_source_node__plan0.sql | 133 ++- .../test_source_node__plan0_optimized.sql | 133 ++- ...set_metric_with_time_constraint__plan0.sql | 181 ++-- ..._with_time_constraint__plan0_optimized.sql | 18 +- .../Clickhouse/test_derived_metric__plan0.sql | 285 +++--- .../test_derived_metric__plan0_optimized.sql | 5 +- ...e_alias_in_different_components__plan0.sql | 287 +++--- ..._different_components__plan0_optimized.sql | 11 +- ...nth_dimension_and_offset_window__plan0.sql | 67 +- ...ion_and_offset_window__plan0_optimized.sql | 11 +- ...ved_metric_with_offset_to_grain__plan0.sql | 314 +++---- ..._with_offset_to_grain__plan0_optimized.sql | 16 +- ...offset_to_grain_and_granularity__plan0.sql | 314 +++---- ...grain_and_granularity__plan0_optimized.sql | 22 +- ...rived_metric_with_offset_window__plan0.sql | 314 +++---- ...ic_with_offset_window__plan0_optimized.sql | 16 +- ...h_offset_window_and_granularity__plan0.sql | 316 +++---- ...indow_and_granularity__plan0_optimized.sql | 20 +- ...fset_window_and_offset_to_grain__plan0.sql | 343 ++++--- ...w_and_offset_to_grain__plan0_optimized.sql | 21 +- ...offset_to_grain_and_granularity__plan0.sql | 347 ++++--- ...grain_and_granularity__plan0_optimized.sql | 23 +- ...h_offset_window_and_time_filter__plan0.sql | 316 +++---- ...indow_and_time_filter__plan0_optimized.sql | 16 +- ...erived_offset_cumulative_metric__plan0.sql | 180 ++-- ...set_cumulative_metric__plan0_optimized.sql | 18 +- ...offset_metric_with_agg_time_dim__plan0.sql | 314 +++---- ...ric_with_agg_time_dim__plan0_optimized.sql | 16 +- ...et_metric_with_one_input_metric__plan0.sql | 169 ++-- ...with_one_input_metric__plan0_optimized.sql | 12 +- .../test_multi_metric_fill_null__plan0.sql | 241 +++-- ...ulti_metric_fill_null__plan0_optimized.sql | 16 +- .../test_nested_derived_metric__plan0.sql | 573 ++++++------ ...nested_derived_metric__plan0_optimized.sql | 16 +- ...d_where_constraint_not_selected__plan0.sql | 203 ++-- ...nstraint_not_selected__plan0_optimized.sql | 23 +- ...h_offset_multiple_input_metrics__plan0.sql | 316 +++---- ...ultiple_input_metrics__plan0_optimized.sql | 20 +- ...d_fill_nulls_without_time_spine__plan0.sql | 141 ++- ...ls_without_time_spine__plan0_optimized.sql | 7 +- ...without_time_spine_multi_metric__plan0.sql | 242 +++-- ...me_spine_multi_metric__plan0_optimized.sql | 17 +- .../Clickhouse/test_nested_filters__plan0.sql | 613 ++++++------- .../test_nested_filters__plan0_optimized.sql | 11 +- .../Clickhouse/test_nested_offsets__plan0.sql | 199 ++-- .../test_nested_offsets__plan0_optimized.sql | 20 +- ...ed_offsets_with_time_constraint__plan0.sql | 200 ++-- ..._with_time_constraint__plan0_optimized.sql | 20 +- ...d_offsets_with_where_constraint__plan0.sql | 200 ++-- ...with_where_constraint__plan0_optimized.sql | 21 +- ...ry_have_different_granularities__plan0.sql | 172 ++-- ...fferent_granularities__plan0_optimized.sql | 15 +- ...n_metric_multiple_granularities__plan0.sql | 177 ++-- ...ultiple_granularities__plan0_optimized.sql | 20 +- ...fset_to_grain_with_agg_time_dim__plan0.sql | 314 +++---- ...ain_with_agg_time_dim__plan0_optimized.sql | 16 +- ...ry_have_different_granularities__plan0.sql | 318 +++---- ...fferent_granularities__plan0_optimized.sql | 20 +- ...w_metric_multiple_granularities__plan0.sql | 330 ++++--- ...ultiple_granularities__plan0_optimized.sql | 32 +- ...offset_window_with_agg_time_dim__plan0.sql | 314 +++---- ...dow_with_agg_time_dim__plan0_optimized.sql | 16 +- ...set_metric_with_time_constraint__plan0.sql | 170 ++-- ..._with_time_constraint__plan0_optimized.sql | 12 +- ...values_with_a_join_and_a_filter__plan0.sql | 145 ++- ...h_a_join_and_a_filter__plan0_optimized.sql | 2 - .../test_dimensions_requiring_join__plan0.sql | 144 ++- ...nsions_requiring_join__plan0_optimized.sql | 5 +- .../Clickhouse/test_add_time_expr__plan0.sql | 3 +- ...mate_continuous_percentile_expr__plan0.sql | 1 - .../test_cast_to_timestamp__plan0.sql | 3 +- ...test_continuous_percentile_expr__plan0.sql | 1 - .../test_discrete_percentile_expr__plan0.sql | 1 - .../Clickhouse/test_generate_uuid__plan0.sql | 1 - .../test_cumulative_fill_nulls__plan0.sql | 177 ++-- ...cumulative_fill_nulls__plan0_optimized.sql | 16 +- ...fill_nulls_for_one_input_metric__plan0.sql | 341 ++++--- ..._for_one_input_metric__plan0_optimized.sql | 22 +- ...ine_with_filter_not_in_group_by__plan0.sql | 176 ++-- ...ilter_not_in_group_by__plan0_optimized.sql | 14 +- ..._not_in_group_by_using_agg_time__plan0.sql | 178 ++-- ...oup_by_using_agg_time__plan0_optimized.sql | 16 +- ..._using_agg_time_and_metric_time__plan0.sql | 176 ++-- ..._time_and_metric_time__plan0_optimized.sql | 14 +- ...th_filter_smaller_than_group_by__plan0.sql | 398 ++++---- ...smaller_than_group_by__plan0_optimized.sql | 16 +- ...join_to_time_spine_with_filters__plan0.sql | 183 ++-- ...me_spine_with_filters__plan0_optimized.sql | 17 +- ...e_fill_nulls_with_0_metric_time__plan0.sql | 166 ++-- ...ls_with_0_metric_time__plan0_optimized.sql | 9 +- ..._simple_fill_nulls_with_0_month__plan0.sql | 172 ++-- ...ll_nulls_with_0_month__plan0_optimized.sql | 14 +- ...th_0_with_categorical_dimension__plan0.sql | 139 ++- ...categorical_dimension__plan0_optimized.sql | 3 - ...lls_with_0_with_non_metric_time__plan0.sql | 139 ++- ..._with_non_metric_time__plan0_optimized.sql | 5 +- ...e_fill_nulls_without_time_spine__plan0.sql | 139 ++- ...ls_without_time_spine__plan0_optimized.sql | 5 +- ...st_offset_window_with_date_part__plan0.sql | 316 +++---- ...window_with_date_part__plan0_optimized.sql | 20 +- ...with_joined_sub_daily_dimension__plan0.sql | 589 ++++++------ ...d_sub_daily_dimension__plan0_optimized.sql | 14 +- ...metric_with_sub_daily_dimension__plan0.sql | 355 ++++--- ...h_sub_daily_dimension__plan0_optimized.sql | 4 +- ...est_simple_query_with_date_part__plan0.sql | 139 ++- ..._query_with_date_part__plan0_optimized.sql | 4 +- ..._query_with_multiple_date_parts__plan0.sql | 149 ++- ...h_multiple_date_parts__plan0_optimized.sql | 14 +- .../test_sub_daily_dimension__plan0.sql | 352 ++++--- ...t_sub_daily_dimension__plan0_optimized.sql | 5 +- .../test_sub_daily_metric_time__plan0.sql | 33 +- ...sub_daily_metric_time__plan0_optimized.sql | 3 +- ...cumulative_grain_to_date_metric__plan0.sql | 366 ++++---- ..._grain_to_date_metric__plan0_optimized.sql | 15 +- ...bdaily_cumulative_window_metric__plan0.sql | 366 ++++---- ...ulative_window_metric__plan0_optimized.sql | 15 +- ...ides_metric_default_granularity__plan0.sql | 384 ++++---- ...c_default_granularity__plan0_optimized.sql | 8 +- ...daily_join_to_time_spine_metric__plan0.sql | 384 ++++---- ..._to_time_spine_metric__plan0_optimized.sql | 8 +- ...subdaily_offset_to_grain_metric__plan0.sql | 387 ++++---- ...ffset_to_grain_metric__plan0_optimized.sql | 12 +- ...t_subdaily_offset_window_metric__plan0.sql | 387 ++++---- ..._offset_window_metric__plan0_optimized.sql | 12 +- ...ily_time_constraint_with_metric__plan0.sql | 391 ++++---- ...onstraint_with_metric__plan0_optimized.sql | 11 +- ...time_constraint_without_metrics__plan0.sql | 32 +- ...raint_without_metrics__plan0_optimized.sql | 3 +- ...values_query_with_metric_filter__plan0.sql | 149 ++- ...ry_with_metric_filter__plan0_optimized.sql | 7 +- ...emantic_model_as_queried_metric__plan0.sql | 282 +++--- ...del_as_queried_metric__plan0_optimized.sql | 8 +- ...t_filter_with_conversion_metric__plan0.sql | 289 +++--- ...ith_conversion_metric__plan0_optimized.sql | 34 +- ...roup_by_has_local_entity_prefix__plan0.sql | 333 ++++--- ...s_local_entity_prefix__plan0_optimized.sql | 9 +- .../test_inner_query_multi_hop__plan0.sql | 296 +++--- ...inner_query_multi_hop__plan0_optimized.sql | 16 +- .../test_inner_query_single_hop__plan0.sql | 129 ++- ...nner_query_single_hop__plan0_optimized.sql | 7 +- .../test_metric_filtered_by_itself__plan0.sql | 282 +++--- ...ic_filtered_by_itself__plan0_optimized.sql | 8 +- ...ric_with_metric_in_where_filter__plan0.sql | 240 +++-- ...etric_in_where_filter__plan0_optimized.sql | 10 +- ...mulative_metric_in_where_filter__plan0.sql | 150 ++- ...etric_in_where_filter__plan0_optimized.sql | 9 +- ..._derived_metric_in_where_filter__plan0.sql | 340 ++++--- ...etric_in_where_filter__plan0_optimized.sql | 18 +- ...with_multiple_metrics_in_filter__plan0.sql | 381 ++++---- ...ple_metrics_in_filter__plan0_optimized.sql | 12 +- ...th_ratio_metric_in_where_filter__plan0.sql | 384 ++++---- ...etric_in_where_filter__plan0_optimized.sql | 8 +- ...h_simple_metric_in_where_filter__plan0.sql | 238 +++-- ...etric_in_where_filter__plan0_optimized.sql | 8 +- ...orm_node_using_non_primary_time__plan0.sql | 134 ++- ...sing_non_primary_time__plan0_optimized.sql | 155 ++-- ...ansform_node_using_primary_time__plan0.sql | 134 ++- ...de_using_primary_time__plan0_optimized.sql | 155 ++-- ...uery_with_metric_time_dimension__plan0.sql | 284 +++--- ...metric_time_dimension__plan0_optimized.sql | 17 +- ...dimensions_with_time_constraint__plan0.sql | 173 ++-- ..._with_time_constraint__plan0_optimized.sql | 7 +- .../test_metric_time_only__plan0.sql | 25 +- ...test_metric_time_only__plan0_optimized.sql | 3 +- .../test_metric_time_quarter_alone__plan0.sql | 25 +- ...ic_time_quarter_alone__plan0_optimized.sql | 5 +- ...tric_time_with_other_dimensions__plan0.sql | 172 ++-- ...with_other_dimensions__plan0_optimized.sql | 7 +- ...conversion_metric_query_filters__plan0.sql | 302 +++--- ..._metric_query_filters__plan0_optimized.sql | 35 +- ..._metric_with_query_time_filters__plan0.sql | 248 +++-- ...th_query_time_filters__plan0_optimized.sql | 11 +- ...re_source_categorical_dimension__plan0.sql | 286 +++--- ...categorical_dimension__plan0_optimized.sql | 13 +- ...spine_metric_predicate_pushdown__plan0.sql | 566 ++++++------ ...ic_predicate_pushdown__plan0_optimized.sql | 31 +- ...ic_time_filter_with_two_targets__plan0.sql | 235 +++-- ...lter_with_two_targets__plan0_optimized.sql | 5 +- ..._categorical_dimension_pushdown__plan0.sql | 146 ++- ...al_dimension_pushdown__plan0_optimized.sql | 3 - ..._metric_with_query_time_filters__plan0.sql | 512 +++++------ ...th_query_time_filters__plan0_optimized.sql | 20 +- ...ry_with_metric_joins_and_filter__plan0.sql | 868 +++++++++--------- ...tric_joins_and_filter__plan0_optimized.sql | 19 +- ...ine_pushdown_filter_application__plan0.sql | 170 ++-- ...wn_filter_application__plan0_optimized.sql | 9 +- ..._categorical_dimension_pushdown__plan0.sql | 235 +++-- ...al_dimension_pushdown__plan0_optimized.sql | 3 - .../test_skipped_pushdown__plan0.sql | 235 +++-- ...test_skipped_pushdown__plan0_optimized.sql | 3 - .../test_common_semantic_model__plan0.sql | 284 +++--- ...common_semantic_model__plan0_optimized.sql | 4 +- .../test_distinct_values__plan0.sql | 94 +- .../test_distinct_values__plan0_optimized.sql | 2 - ...th_where_constraint_on_join_dim__plan0.sql | 235 +++-- ...onstraint_on_join_dim__plan0_optimized.sql | 3 - .../test_join_to_scd_dimension__plan0.sql | 240 ++--- ...join_to_scd_dimension__plan0_optimized.sql | 21 +- .../Clickhouse/test_limit_rows__plan0.sql | 140 ++- .../test_limit_rows__plan0_optimized.sql | 4 +- ...al_dimension_using_local_entity__plan0.sql | 95 +- ...on_using_local_entity__plan0_optimized.sql | 2 - .../test_measure_constraint__plan0.sql | 619 ++++++------- ...st_measure_constraint__plan0_optimized.sql | 17 +- ..._constraint_with_reused_measure__plan0.sql | 286 +++--- ...t_with_reused_measure__plan0_optimized.sql | 13 +- ...aint_with_single_expr_and_alias__plan0.sql | 141 ++- ...single_expr_and_alias__plan0_optimized.sql | 5 +- ..._multiple_sources_no_dimensions__plan0.sql | 235 +++-- ...sources_no_dimensions__plan0_optimized.sql | 6 +- .../test_min_max_metric_time__plan0.sql | 26 +- ...t_min_max_metric_time__plan0_optimized.sql | 4 +- .../test_min_max_metric_time_week__plan0.sql | 26 +- ..._max_metric_time_week__plan0_optimized.sql | 6 +- .../test_min_max_only_categorical__plan0.sql | 93 +- ..._max_only_categorical__plan0_optimized.sql | 4 +- .../test_min_max_only_time__plan0.sql | 137 ++- ...est_min_max_only_time__plan0_optimized.sql | 6 +- .../test_min_max_only_time_quarter__plan0.sql | 137 ++- ...max_only_time_quarter__plan0_optimized.sql | 6 +- ...multi_hop_through_scd_dimension__plan0.sql | 291 +++--- ...through_scd_dimension__plan0_optimized.sql | 26 +- ...test_multi_hop_to_scd_dimension__plan0.sql | 247 ++--- ..._hop_to_scd_dimension__plan0_optimized.sql | 26 +- .../Clickhouse/test_multihop_node__plan0.sql | 219 ++--- .../test_multihop_node__plan0_optimized.sql | 13 +- ..._multiple_metrics_no_dimensions__plan0.sql | 236 +++-- ...metrics_no_dimensions__plan0_optimized.sql | 10 +- ...imension_with_non_default_grain__plan0.sql | 148 ++- ...ith_non_default_grain__plan0_optimized.sql | 10 +- .../test_partitioned_join__plan0.sql | 450 +++++---- ...test_partitioned_join__plan0_optimized.sql | 8 +- .../Clickhouse/test_id_enumeration__query.sql | 14 +- .../Clickhouse/test_render_query__query0.sql | 4 +- .../test_component_rendering__plan0.sql | 1 - .../test_component_rendering__plan1.sql | 1 - .../test_component_rendering__plan2.sql | 1 - .../test_component_rendering__plan3.sql | 1 - .../test_component_rendering__plan4.sql | 3 +- .../test_component_rendering__plan5.sql | 5 +- ...ender_create_table_as__create_table_as.sql | 1 - ...render_create_table_as__create_view_as.sql | 1 - .../Clickhouse/test_render_limit__plan0.sql | 1 - .../test_render_order_by__plan0.sql | 1 - .../Clickhouse/test_render_where__plan0.sql | 1 - ...e_with_input_measure_constraint__plan0.sql | 174 ++-- ...ut_measure_constraint__plan0_optimized.sql | 10 +- ...ne_with_queried_time_constraint__plan0.sql | 173 ++-- ...eried_time_constraint__plan0_optimized.sql | 12 +- .../test_simple_join_to_time_spine__plan0.sql | 166 ++-- ...le_join_to_time_spine__plan0_optimized.sql | 8 +- ..._join_to_time_spine_with_filter__plan0.sql | 167 ++-- ...ime_spine_with_filter__plan0_optimized.sql | 9 +- ..._time_spine_with_queried_filter__plan0.sql | 170 ++-- ...e_with_queried_filter__plan0_optimized.sql | 10 +- 421 files changed, 21316 insertions(+), 23808 deletions(-) create mode 100644 local-data-warehouses/clickhouse/config.xml diff --git a/local-data-warehouses/clickhouse/config.xml b/local-data-warehouses/clickhouse/config.xml new file mode 100644 index 0000000000..9aed3fda30 --- /dev/null +++ b/local-data-warehouses/clickhouse/config.xml @@ -0,0 +1,6 @@ + + + 1 + + + \ No newline at end of file diff --git a/local-data-warehouses/clickhouse/docker-compose.yaml b/local-data-warehouses/clickhouse/docker-compose.yaml index e46294a705..209f717127 100644 --- a/local-data-warehouses/clickhouse/docker-compose.yaml +++ b/local-data-warehouses/clickhouse/docker-compose.yaml @@ -3,7 +3,7 @@ version: "3.7" services: clickhouse: container_name: clickhouse - image: clickhouse + image: clickhouse/clickhouse-server expose: - "8123" - "9000" @@ -14,3 +14,5 @@ services: CLICKHOUSE_USER: "metricflow" CLICKHOUSE_PASSWORD: "metricflowing" CLICKHOUSE_DB: "metricflow" + volumes: + - ./config.xml:/etc/clickhouse-server/config.d/config.xml \ No newline at end of file diff --git a/metricflow/protocols/sql_client.py b/metricflow/protocols/sql_client.py index 353fe7f018..8233f23d9b 100644 --- a/metricflow/protocols/sql_client.py +++ b/metricflow/protocols/sql_client.py @@ -51,9 +51,7 @@ def unsupported_granularities(self) -> Set[TimeGranularity]: elif self is SqlEngine.TRINO: return {TimeGranularity.NANOSECOND, TimeGranularity.MICROSECOND} elif self is SqlEngine.CLICKHOUSE: - return ( - set() - ) # TODO: it looks like clickhouse supports nanoseconds (https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions#date_trunc) + return {TimeGranularity.NANOSECOND, TimeGranularity.MICROSECOND} else: assert_values_exhausted(self) diff --git a/metricflow/sql/render/clickhouse.py b/metricflow/sql/render/clickhouse.py index 0401bceadd..bd01bb9bbb 100644 --- a/metricflow/sql/render/clickhouse.py +++ b/metricflow/sql/render/clickhouse.py @@ -1,5 +1,6 @@ from __future__ import annotations +import re import textwrap from typing import Collection, Optional, Sequence @@ -16,7 +17,8 @@ SqlIntegerExpression, SqlPercentileExpression, SqlPercentileFunctionType, - SqlSubtractTimeIntervalExpression, + SqlSubtractTimeIntervalExpression, SqlExpressionNode, SqlExtractExpression, SqlDateTruncExpression, + SqlCastToTimestampExpression, ) from typing_extensions import override @@ -28,7 +30,8 @@ ) from metricflow.sql.render.rendering_constants import SqlRenderingConstants from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlPlanRenderResult -from metricflow.sql.sql_plan import SqlJoinDescription +from metricflow.sql.sql_plan import SqlJoinDescription, SqlSelectColumn +from metricflow_semantics.sql.sql_join_type import SqlJoinType class ClickhouseSqlExpressionRenderer(DefaultSqlExpressionRenderer): @@ -70,48 +73,84 @@ def render_date_part(self, date_part: DatePart) -> str: return "toDayOfMonth" return assert_values_exhausted(date_part) + # @override + # def visit_subtract_time_interval_expr(self, node: SqlSubtractTimeIntervalExpression) -> SqlExpressionRenderResult: + # """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" + # arg_rendered = node.arg.accept(self) + # + # count = node.count + # granularity = node.granularity + # if granularity is TimeGranularity.QUARTER: + # granularity = TimeGranularity.MONTH + # count *= self.__QUARTER_IN_MONTHS + # + # function_name = self.__get_function_operation_from_time_granularity(granularity) + # + # return SqlExpressionRenderResult( + # sql=f"{function_name}({arg_rendered.sql}, CAST(-{count} AS Integer))", + # bind_parameter_set=arg_rendered.bind_parameter_set, + # ) + # + # @override + # def visit_add_time_expr(self, node: SqlAddTimeExpression) -> SqlExpressionRenderResult: + # """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" + # granularity = node.granularity + # count_expr = node.count_expr + # if granularity is TimeGranularity.QUARTER: + # granularity = TimeGranularity.MONTH + # SqlArithmeticExpression.create( + # left_expr=node.count_expr, + # operator=SqlArithmeticOperator.MULTIPLY, + # right_expr=SqlIntegerExpression.create(self.__QUARTER_IN_MONTHS), + # ) # TODO: this is not correct, we need to multiply the count by the number of months in a quarter ? + # + # arg_rendered = node.arg.accept(self) + # count_rendered = count_expr.accept(self) + # count_sql = f"({count_rendered.sql})" if count_expr.requires_parenthesis else count_rendered.sql + # + # function_operation = self.__get_function_operation_from_time_granularity(granularity) + # + # return SqlExpressionRenderResult( + # sql=f"{function_operation}({arg_rendered.sql}, CAST({count_sql} AS Integer))", + # bind_parameter_set=SqlBindParameterSet.merge_iterable( + # (arg_rendered.bind_parameter_set, count_rendered.bind_parameter_set) + # ), + # ) + # @override - def visit_subtract_time_interval_expr(self, node: SqlSubtractTimeIntervalExpression) -> SqlExpressionRenderResult: - """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" - arg_rendered = node.arg.accept(self) - - count = node.count - granularity = node.granularity - if granularity is TimeGranularity.QUARTER: - granularity = TimeGranularity.MONTH - count *= self.__QUARTER_IN_MONTHS - - function_name = self.__get_function_operation_from_time_granularity(granularity) + def visit_cast_to_timestamp_expr(self, node: SqlCastToTimestampExpression) -> SqlExpressionRenderResult: + """Override to use Clickhouse's timestamp casting.""" + arg_rendered = self.render_sql_expr(node.arg) + # For timestamp casting, use toDateTime return SqlExpressionRenderResult( - sql=f"{function_name}({arg_rendered.sql}, CAST(-{count} AS Integer))", + sql=f"toDateTime({arg_rendered.sql})", bind_parameter_set=arg_rendered.bind_parameter_set, ) @override - def visit_add_time_expr(self, node: SqlAddTimeExpression) -> SqlExpressionRenderResult: - """Render time delta operations for Clickhouse, which needs custom support for quarterly granularity.""" - granularity = node.granularity - count_expr = node.count_expr - if granularity is TimeGranularity.QUARTER: - granularity = TimeGranularity.MONTH - SqlArithmeticExpression.create( - left_expr=node.count_expr, - operator=SqlArithmeticOperator.MULTIPLY, - right_expr=SqlIntegerExpression.create(self.__QUARTER_IN_MONTHS), - ) # TODO: this is not correct, we need to multiply the count by the number of months in a quarter ? - - arg_rendered = node.arg.accept(self) - count_rendered = count_expr.accept(self) - count_sql = f"({count_rendered.sql})" if count_expr.requires_parenthesis else count_rendered.sql - - function_operation = self.__get_function_operation_from_time_granularity(granularity) + def visit_date_trunc_expr(self, node: SqlDateTruncExpression) -> SqlExpressionRenderResult: + self._validate_granularity_for_engine(node.time_granularity) + + """Handle date truncation expressions properly.""" + arg_rendered = self.render_sql_expr(node.arg) + + # Map the granularity to Clickhouse's date truncation functions + trunc_function = { + TimeGranularity.DAY: "day", + TimeGranularity.WEEK: "week", + TimeGranularity.MONTH: "month", + TimeGranularity.QUARTER: "quarter", + TimeGranularity.YEAR: "year", + TimeGranularity.HOUR: "hour", + TimeGranularity.MILLISECOND: "milisecond", + TimeGranularity.SECOND: "second", + TimeGranularity.MINUTE: "minute" + }[node.time_granularity] return SqlExpressionRenderResult( - sql=f"{function_operation}({arg_rendered.sql}, CAST({count_sql} AS Integer))", - bind_parameter_set=SqlBindParameterSet.merge_iterable( - (arg_rendered.bind_parameter_set, count_rendered.bind_parameter_set) - ), + sql=f"date_trunc('{trunc_function}', {arg_rendered.sql})", + bind_parameter_set=arg_rendered.bind_parameter_set, ) @override @@ -148,6 +187,20 @@ def visit_percentile_expr(self, node: SqlPercentileExpression) -> SqlExpressionR bind_parameter_set=params, ) + @override + def visit_extract_expr(self, node: SqlExtractExpression) -> SqlExpressionRenderResult: + """Renders extract expressions with required output conversions for Clickhouse. + + Clickhouse doesn't support extract for dates. It has its own functions to extract data from timestamps. + """ + + arg_rendered = self.render_sql_expr(node.arg) + + return SqlExpressionRenderResult( + sql=f"{self.render_date_part(node.date_part)}({arg_rendered.sql})", + bind_parameter_set=arg_rendered.bind_parameter_set, + ) + def __get_function_operation_from_time_granularity(self, granularity: TimeGranularity) -> str: return { TimeGranularity.YEAR: "addYears", @@ -160,6 +213,24 @@ def __get_function_operation_from_time_granularity(self, granularity: TimeGranul TimeGranularity.SECOND: "addSeconds", }[granularity] + @override + def render_group_by_expr(self, group_by_column: SqlSelectColumn) -> SqlExpressionRenderResult: + """Custom rendering of group by column expressions. + + BigQuery requires group bys to be referenced by alias, rather than duplicating the expression from the SELECT + + e.g., + SELECT COALESCE(x, y) AS x_or_y, SUM(1) + FROM source_table + GROUP BY x_or_y + + By default we would render GROUP BY COALESCE(x, y) on that last line, and BigQuery will throw an exception + """ + return SqlExpressionRenderResult( + sql=group_by_column.column_alias, + bind_parameter_set=group_by_column.expr.bind_parameter_set, + ) + class ClickhouseSqlQueryPlanRenderer(DefaultSqlQueryPlanRenderer): """Plan renderer for the Clickhouse engine.""" @@ -171,69 +242,141 @@ class ClickhouseSqlQueryPlanRenderer(DefaultSqlQueryPlanRenderer): def expr_renderer(self) -> SqlExpressionRenderer: return self.EXPR_RENDERER - @override - def _render_adapter_specific_flags(self) -> Optional[SqlPlanRenderResult]: - """Add ClickHouse-specific query settings.""" - settings = ["allow_experimental_join_condition = 1", "allow_experimental_analyzer = 1", "join_use_nulls = 0"] - return SqlPlanRenderResult(sql=f"SETTINGS {', '.join(settings)}", bind_parameter_set=SqlBindParameterSet()) - - def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: - """Convert the join descriptions into a "JOIN" section with ClickHouse-specific handling.""" - if len(join_descriptions) == 0: - return None - - params = SqlBindParameterSet() - join_section_lines = [] - where_conditions = [] - - for join_description in join_descriptions: - right_source_rendered = self._render_node(join_description.right_source) - params = params.merge(right_source_rendered.bind_parameter_set) - - on_condition_rendered: Optional[SqlExpressionRenderResult] = None - if join_description.on_condition: - on_condition_rendered = self.EXPR_RENDERER.render_sql_expr(join_description.on_condition) - params = params.merge(on_condition_rendered.bind_parameter_set) - - # Check if this is a time-range join - is_time_range_join = False - if on_condition_rendered: - is_time_range_join = any(op in on_condition_rendered.sql for op in ["<=", ">=", "<", ">"]) - - # Add join type - join_section_lines.append(join_description.join_type.value) - - # Add the source - if join_description.right_source.as_sql_table_node is not None: - join_section_lines.append( - textwrap.indent( - f"{right_source_rendered.sql} {join_description.right_source_alias}", - prefix=SqlRenderingConstants.INDENT, - ) - ) - else: - join_section_lines.append("(") - join_section_lines.append( - textwrap.indent(right_source_rendered.sql, prefix=SqlRenderingConstants.INDENT) - ) - join_section_lines.append(f") {join_description.right_source_alias}") - - # Add conditions - if is_time_range_join: - # For time-range joins, convert to CROSS JOIN + WHERE - join_section_lines[-len(join_section_lines)] = "CROSS JOIN" # Replace join type - if on_condition_rendered: - where_conditions.append(on_condition_rendered.sql) - else: - # For regular joins, use ON clause - if on_condition_rendered: - join_section_lines.append("ON") - join_section_lines.append( - textwrap.indent(on_condition_rendered.sql, prefix=SqlRenderingConstants.INDENT) - ) - - # Store where conditions for use in _render_where_section - if where_conditions: - self._stored_where_conditions = where_conditions - - return SqlPlanRenderResult("\n".join(join_section_lines), params) + + + # + # @override + # def _render_where(self, where_expression: Optional[SqlExpressionNode]) -> Optional[SqlPlanRenderResult]: + # """Override to combine stored where conditions from joins with the main where clause.""" + # original_where = super()._render_where(where_expression) + # stored_conditions = getattr(self, '_stored_where_conditions', []) + # + # # Clear stored conditions to prevent them from being used multiple times + # self._stored_where_conditions = [] + # + # if not stored_conditions and not original_where: + # return None + # + # conditions = [] + # + # # Add original where condition if it exists + # if original_where: + # # Strip the "WHERE" prefix if it exists + # where_sql = original_where.sql + # if where_sql.upper().startswith('WHERE '): + # where_sql = where_sql[6:] + # conditions.append(where_sql) + # + # # Add stored conditions from joins (only unique conditions) + # seen_conditions = set() + # for condition in stored_conditions: + # if condition not in seen_conditions: + # conditions.append(condition) + # seen_conditions.add(condition) + # + # # Combine all conditions with AND + # combined_sql = ' AND '.join(f'({condition})' for condition in conditions if condition.strip()) + # + # return SqlPlanRenderResult( + # sql=f"WHERE {combined_sql}" if combined_sql else "", + # bind_parameter_set=original_where.bind_parameter_set if original_where else SqlBindParameterSet(), + # ) + # + # + # @override + # def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: + # """Convert the join descriptions into a "JOIN" section with ClickHouse-specific handling. + # + # Args: + # join_descriptions: Sequence of join descriptions to render + # + # Returns: + # SqlPlanRenderResult with the rendered JOIN section, or None if no joins + # """ + # if not join_descriptions: + # return None + # + # params = SqlBindParameterSet() + # join_section_lines = [] + # where_conditions = [] + # + # for join_description in join_descriptions: + # join_lines, join_params, join_where_conditions = self._render_single_join(join_description) + # join_section_lines.extend(join_lines) + # params = params.merge(join_params) + # where_conditions.extend(join_where_conditions) + # + # # Store where conditions for use in _render_where_section + # if where_conditions: + # self._stored_where_conditions = where_conditions + # + # return SqlPlanRenderResult("\n".join(join_section_lines), params) + # + # def _render_single_join(self, join_description: SqlJoinDescription) -> tuple[list[str], SqlBindParameterSet, list[str]]: + # """Renders a single join description.""" + # join_lines = [] + # where_conditions = [] + # params = SqlBindParameterSet() + # + # # Render the right source + # right_source_rendered = self._render_node(join_description.right_source) + # params = params.merge(right_source_rendered.bind_parameter_set) + # + # # Render the ON condition if present + # on_condition = self._render_join_condition(join_description.on_condition) + # if on_condition: + # on_condition = SqlExpressionRenderResult( + # sql=on_condition.sql, + # bind_parameter_set=on_condition.bind_parameter_set + # ) + # params = params.merge(on_condition.bind_parameter_set) + # + # # Add join type and source + # join_lines.append(join_description.join_type.value) + # source_lines = self.__render_join_source( + # right_source_rendered.sql, + # join_description.right_source_alias, + # join_description.right_source.as_sql_table_node is not None + # ) + # join_lines.extend(source_lines) + # + # # Always add ON clause for Clickhouse, even for inequality joins + # if on_condition: + # if self.__is_inequality_join(on_condition.sql): + # # For inequality joins, use a simple 1=1 in ON clause and move real condition to WHERE + # join_lines.extend(["ON", textwrap.indent("1 = 1", prefix=SqlRenderingConstants.INDENT)]) + # where_conditions.append(on_condition.sql) + # else: + # join_lines.extend(["ON", textwrap.indent(on_condition.sql, prefix=SqlRenderingConstants.INDENT)]) + # + # return join_lines, params, where_conditions + # + # def _render_join_condition(self, condition: Optional[SqlExpressionNode]) -> Optional[SqlExpressionRenderResult]: + # """Renders the JOIN's ON condition if present.""" + # if condition: + # return self.EXPR_RENDERER.render_sql_expr(condition) + # return None + # + # def __get_join_type(self, original_type: SqlJoinType, on_condition: Optional[SqlExpressionRenderResult]) -> SqlJoinType: + # """Determines the final join type, converting to CROSS JOIN for time-range joins.""" + # if on_condition and self.__is_inequality_join(on_condition.sql): + # return SqlJoinType.CROSS_JOIN + # return original_type + # + # @staticmethod + # def __is_inequality_join(condition_sql: str) -> bool: + # """Checks if a join condition contains time range operators.""" + # inequality_operators = ["<=", ">=", "<", ">"] + # return any(op in condition_sql for op in inequality_operators) + # + # @staticmethod + # def __render_join_source(source_sql: str, alias: str, is_table: bool) -> list[str]: + # """Renders the join's source table or subquery with proper indentation.""" + # if is_table: + # return [textwrap.indent(f"{source_sql} AS {alias.lower()}", prefix=SqlRenderingConstants.INDENT)] + # + # return [ + # "(", + # textwrap.indent(source_sql, prefix=SqlRenderingConstants.INDENT), + # f") AS {alias.lower()}" # Force lowercase here too + # ] \ No newline at end of file diff --git a/metricflow/sql/render/sql_plan_renderer.py b/metricflow/sql/render/sql_plan_renderer.py index 040e2432e7..59e51cca82 100644 --- a/metricflow/sql/render/sql_plan_renderer.py +++ b/metricflow/sql/render/sql_plan_renderer.py @@ -322,9 +322,6 @@ def _render_limit_section(self, limit_value: Optional[int]) -> Optional[SqlPlanR return None return SqlPlanRenderResult(sql=f"LIMIT {limit_value}", bind_parameter_set=SqlBindParameterSet()) - def _render_adapter_specific_flags(self) -> Optional[SqlPlanRenderResult]: - return None - def visit_select_statement_node(self, node: SqlSelectStatementNode) -> SqlPlanRenderResult: # noqa: D102 render_results = [ self._render_description_section(node.description), @@ -336,7 +333,6 @@ def visit_select_statement_node(self, node: SqlSelectStatementNode) -> SqlPlanRe self._render_group_by_section(node.group_bys), self._render_order_by_section(node.order_bys), self._render_limit_section(node.limit), - self._render_adapter_specific_flags(), ] valid_render_results = tuple(render_result for render_result in render_results if render_result is not None) diff --git a/tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml b/tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml index d76cc1e4f3..ff767c4bcf 100644 --- a/tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml +++ b/tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml @@ -437,7 +437,7 @@ integration_test: FROM ( SELECT t.ds AS metric_time__day - , {{ render_date_trunc("T.ds", TimeGranularity.WEEK) }} AS metric_time__week + , {{ render_date_trunc("t.ds", TimeGranularity.WEEK) }} AS metric_time__week , {{ render_date_trunc("t.ds", TimeGranularity.QUARTER) }} AS metric_time__quarter , SUM(r.revenue) AS revenue_all_time FROM {{ source_schema }}.mf_time_spine t @@ -611,7 +611,7 @@ integration_test: , 1 AS archived_users FROM {{ source_schema }}.dim_users ) subq_1 - ON (subq_1.metric_time__hour <= subq_3.ts) AND (subq_1.metric_time__hour > {{ render_date_sub("subq_3", "Ts", 3, TimeGranularity.HOUR) }}) + ON (subq_1.metric_time__hour <= subq_3.ts) AND (subq_1.metric_time__hour > {{ render_date_sub("subq_3", "ts", 3, TimeGranularity.HOUR) }}) GROUP BY subq_3.ts --- integration_test: diff --git a/tests_metricflow/integration/test_cases/itest_granularity.yaml b/tests_metricflow/integration/test_cases/itest_granularity.yaml index b83cbeb03e..932c9559a3 100644 --- a/tests_metricflow/integration/test_cases/itest_granularity.yaml +++ b/tests_metricflow/integration/test_cases/itest_granularity.yaml @@ -268,7 +268,7 @@ integration_test: FROM {{ source_schema }}.fct_bookings_extended WHERE {{ render_time_constraint("ds", "2020-01-01", "2020-02-29") }} - GROUP BY {{ render_date_trunc("ds", TimeGranularity.MONTH) }} + GROUP BY {{ render_date_trunc("ds", TimeGranularity.MONTH) }} as ds ) b ON a.ds = b.ds ) c diff --git a/tests_metricflow/integration/test_configured_cases.py b/tests_metricflow/integration/test_configured_cases.py index 027834d059..900a9cdcf9 100644 --- a/tests_metricflow/integration/test_configured_cases.py +++ b/tests_metricflow/integration/test_configured_cases.py @@ -336,3 +336,4 @@ def test_case( # If we sort, it's effectively not checking the order whatever order that the output was would be overwritten. assert actual is not None, "Did not get a result table from MetricFlow" assert_data_tables_equal(actual, expected, sort_columns=not case.check_order, allow_empty=case.allow_empty) + diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql index 2e88dc45ab..2c72026ce2 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql @@ -117,50 +117,44 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_14.metric_time__day @@ -305,46 +299,41 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -459,65 +448,62 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_15 ON subq_4.metric_time__day = subq_15.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql index 20488af9e8..a5b7c0dab1 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql @@ -9,11 +9,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -39,15 +38,12 @@ FROM ( , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__day = '2020-01-01' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys', 'metric_time__day'] -- Aggregate Measures @@ -97,34 +93,32 @@ FROM ( , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + ) ) subq_28 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_21.metric_time__day = subq_31.metric_time__day GROUP BY - COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql index 73850cdf0c..7d38e99c61 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql @@ -121,51 +121,45 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - , subq_3.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_14.metric_time__day @@ -322,46 +316,41 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -476,61 +465,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.metric_time__day - , subq_14.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_15 ON ( @@ -539,8 +527,6 @@ FROM ( subq_4.metric_time__day = subq_15.metric_time__day ) GROUP BY - COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) - , COALESCE(subq_4.visit__referrer_id, subq_15.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql index 9b5cd97221..5a26d4087b 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql @@ -9,12 +9,11 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -44,16 +43,13 @@ FROM ( , visit__referrer_id , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE visit__referrer_id = 'ref_id_01' GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] -- Aggregate Measures @@ -114,30 +110,30 @@ FROM ( , visit__referrer_id , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + ) ) subq_28 GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON ( @@ -146,8 +142,6 @@ FROM ( subq_21.metric_time__day = subq_31.metric_time__day ) GROUP BY - COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) - , COALESCE(subq_21.visit__referrer_id, subq_31.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql index 77b12514b7..1266cc37d5 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql @@ -69,45 +69,40 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_12.buys_month) AS buys_month @@ -206,43 +201,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -345,59 +336,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + ( + subq_6.metric_time__month <= subq_9.metric_time__month + ) AND ( + subq_6.metric_time__month > DATEADD(month, -1, subq_9.metric_time__month) + ) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql index eaf2248a0b..1c3ad91d25 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql @@ -10,11 +10,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('month', ds) AS metric_time__month , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -26,10 +25,8 @@ FROM ( SELECT SUM(visits) AS visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of 1 month -- Pass Only Elements: ['buys_month',] -- Aggregate Measures @@ -65,21 +62,26 @@ CROSS JOIN , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys_month AS buys_month FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds_month' -- Add column with generated UUID SELECT - DATE_TRUNC('month', ds_month) AS metric_time__month + date_trunc('month', ds_month) AS metric_time__month , user_id AS user , 1 AS buys_month , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + ( + sma_28019_cte.metric_time__month <= subq_23.metric_time__month + ) AND ( + sma_28019_cte.metric_time__month > DATEADD(month, -1, subq_23.metric_time__month) + ) + ) ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql index 3b7ccf1992..6e5baf6a89 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql @@ -113,48 +113,42 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_14.buys) AS buys @@ -297,46 +291,41 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -451,59 +440,56 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql index 6cda118b57..96107e5cea 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql @@ -10,11 +10,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -32,13 +31,10 @@ FROM ( , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys',] -- Aggregate Measures @@ -87,26 +83,25 @@ CROSS JOIN , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + ) ) subq_28 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql index a62e54ad16..b1d2300d7c 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql @@ -113,48 +113,42 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_14.buys) AS buys @@ -307,46 +301,41 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -461,59 +450,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + ( + subq_8.metric_time__day <= subq_11.metric_time__day + ) AND ( + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) + ) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql index 20def8aa35..5e43718a21 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql @@ -10,12 +10,11 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,13 +33,10 @@ FROM ( , visit__referrer_id , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys',] -- Aggregate Measures @@ -99,26 +95,29 @@ CROSS JOIN , visit__referrer_id , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + ( + subq_24.metric_time__day <= subq_27.metric_time__day + ) AND ( + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) + ) + ) ) subq_28 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql index c3f1d639b2..70339d4f39 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql @@ -161,53 +161,46 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_16.visit__referrer_id @@ -406,49 +399,43 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -563,65 +550,62 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_10.user = subq_13.user + ) AND ( + (subq_10.metric_time__day <= subq_13.metric_time__day) + ) ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY - subq_16.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_17 ON subq_5.visit__referrer_id = subq_17.visit__referrer_id GROUP BY - COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql index 2ce4e69c78..3187f076d3 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql @@ -10,13 +10,12 @@ WITH ctr_0_cte AS ( -- Metric Time Dimension 'ds' -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' ) SELECT @@ -43,15 +42,12 @@ FROM ( , visit__referrer_id , visits FROM ctr_0_cte ctr_0_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 WHERE visit__referrer_id = 'ref_id_01' GROUP BY visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys', 'visit__referrer_id'] -- Aggregate Measures @@ -111,34 +107,32 @@ FROM ( , visit__referrer_id , visits FROM ctr_0_cte ctr_0_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_27.user = subq_30.user + ) AND ( + (subq_27.metric_time__day <= subq_30.metric_time__day) + ) ) subq_31 GROUP BY visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 ON subq_24.visit__referrer_id = subq_34.visit__referrer_id GROUP BY - COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_35 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql index 12bfeaee5a..c663d67553 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql @@ -117,50 +117,44 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_14.metric_time__day @@ -305,46 +299,41 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -459,65 +448,66 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + ( + subq_8.metric_time__day <= subq_11.metric_time__day + ) AND ( + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) + ) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_15 ON subq_4.metric_time__day = subq_15.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_15.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql index 1b68e9dad5..0dac368c16 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql @@ -9,11 +9,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -39,15 +38,12 @@ FROM ( , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__day = '2020-01-01' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'metric_time__day'] -- Aggregate Measures @@ -97,34 +93,36 @@ FROM ( , sma_28019_cte.user , visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + ( + subq_24.metric_time__day <= subq_27.metric_time__day + ) AND ( + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) + ) + ) ) subq_28 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_21.metric_time__day = subq_31.metric_time__day GROUP BY - COALESCE(subq_21.metric_time__day, subq_31.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql index ffcc07c274..f63a590366 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql @@ -165,54 +165,47 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__day - , subq_4.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_16.metric_time__day @@ -413,49 +406,43 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -570,61 +557,64 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_10.user = subq_13.user + ) AND ( + ( + subq_10.metric_time__day <= subq_13.metric_time__day + ) AND ( + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) + ) + ) ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY - subq_16.metric_time__day - , subq_16.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_17 ON ( @@ -633,8 +623,6 @@ FROM ( subq_5.metric_time__day = subq_17.metric_time__day ) GROUP BY - COALESCE(subq_5.metric_time__day, subq_17.metric_time__day) - , COALESCE(subq_5.visit__referrer_id, subq_17.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql index 51e935b77c..9456dff011 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql @@ -10,13 +10,12 @@ WITH ctr_0_cte AS ( -- Metric Time Dimension 'ds' -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' ) SELECT @@ -46,16 +45,13 @@ FROM ( , visit__referrer_id , visits FROM ctr_0_cte ctr_0_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 WHERE visit__referrer_id = 'ref_id_01' GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] -- Aggregate Measures @@ -116,30 +112,34 @@ FROM ( , visit__referrer_id , visits FROM ctr_0_cte ctr_0_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 WHERE visit__referrer_id = 'ref_id_01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_27.user = subq_30.user + ) AND ( + ( + subq_27.metric_time__day <= subq_30.metric_time__day + ) AND ( + subq_27.metric_time__day > DATEADD(day, -7, subq_30.metric_time__day) + ) + ) ) subq_31 GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 ON ( @@ -148,8 +148,6 @@ FROM ( subq_24.metric_time__day = subq_34.metric_time__day ) GROUP BY - COALESCE(subq_24.metric_time__day, subq_34.metric_time__day) - , COALESCE(subq_24.visit__referrer_id, subq_34.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_35 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt index 66e37990fb..f9411b038c 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt @@ -5,11 +5,11 @@ docstring: --- metric_time__day visit_buy_conversion_rate ------------------- --------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 0 -2020-01-03T00:00:00 0 -2020-01-04T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 0 -2020-01-10T00:00:00 0 -2020-01-12T00:00:00 8 +2020-01-01T00:00:00 0.5 +2020-01-02T00:00:00 0.5 +2020-01-03T00:00:00 0.67 +2020-01-04T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 1 +2020-01-10T00:00:00 1 +2020-01-12T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt index 53d048bce9..82301fa3fd 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_categorical_filter__query_output.txt @@ -5,6 +5,6 @@ docstring: --- metric_time__day visit__referrer_id visit_buy_conversion_rate ------------------- -------------------- --------------------------- -2020-01-01T00:00:00 fb_ad_1 0 -2020-01-02T00:00:00 fb_ad_1 0 -2020-01-03T00:00:00 fb_ad_1 8 +2020-01-01T00:00:00 fb_ad_1 2 +2020-01-02T00:00:00 fb_ad_1 1 +2020-01-03T00:00:00 fb_ad_1 1 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt index 34dad5b64b..47e542d323 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__query_output.txt @@ -5,4 +5,4 @@ docstring: --- visit_buy_conversions ----------------------- - 8 + 3 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt index e9d0b38559..e6a876dacb 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_time_constraint__query_output.txt @@ -5,4 +5,4 @@ docstring: --- visit__referrer_id visit_buy_conversion_rate -------------------- --------------------------- -fb_ad_1 4 +fb_ad_1 1.5 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt index fd1fc6226e..48097bce0b 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt @@ -5,11 +5,11 @@ docstring: --- metric_time__day visit_buy_conversion_rate_7days ------------------- --------------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 0 -2020-01-03T00:00:00 0 -2020-01-04T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 0 -2020-01-10T00:00:00 0 -2020-01-12T00:00:00 8 +2020-01-01T00:00:00 0.5 +2020-01-02T00:00:00 0.5 +2020-01-03T00:00:00 0.67 +2020-01-04T00:00:00 0 +2020-01-06T00:00:00 0 +2020-01-07T00:00:00 1 +2020-01-10T00:00:00 1 +2020-01-12T00:00:00 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt index 5815927b22..d6d0405a72 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window_and_time_constraint__query_output.txt @@ -5,5 +5,5 @@ docstring: --- metric_time__day visit__referrer_id visit_buy_conversion_rate_7days ------------------- -------------------- --------------------------------- -2020-01-01T00:00:00 fb_ad_1 0 -2020-01-02T00:00:00 fb_ad_1 8 +2020-01-01T00:00:00 fb_ad_1 2 +2020-01-02T00:00:00 fb_ad_1 1 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql index 24d1412402..983845a562 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql @@ -69,45 +69,40 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_12.buys) AS buys @@ -206,43 +201,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -357,59 +348,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + ( + subq_6.metric_time__day <= subq_9.metric_time__day + ) AND ( + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) + ) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql index e247568a4e..12f11dc095 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql @@ -10,11 +10,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -26,10 +25,8 @@ FROM ( SELECT SUM(visits) AS visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys',] -- Aggregate Measures @@ -65,21 +62,26 @@ CROSS JOIN , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + ( + sma_28019_cte.metric_time__day <= subq_23.metric_time__day + ) AND ( + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) + ) + ) ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql index 8f78f83177..e46d0c2606 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql @@ -42,26 +42,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__day @@ -120,51 +116,45 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 ON subq_6.metric_time__day = subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset SELECT subq_20.metric_time__day AS metric_time__day @@ -192,26 +182,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_16.metric_time__day @@ -312,43 +298,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -463,69 +445,69 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_10.user = subq_13.user + ) AND ( + ( + subq_10.metric_time__day <= subq_13.metric_time__day + ) AND ( + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) + ) + ) ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY - subq_16.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_17 ON subq_20.metric_time__day = subq_17.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON subq_7.metric_time__day = subq_21.metric_time__day GROUP BY - COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql index 14683068c5..db0dbff827 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql @@ -9,11 +9,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28018_cte AS ( @@ -21,7 +20,6 @@ WITH sma_28019_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -39,8 +37,7 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , subq_26.visits AS visits FROM rss_28018_cte rss_28018_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28019 -- Pass Only Elements: ['visits', 'metric_time__day'] -- Aggregate Measures @@ -50,21 +47,17 @@ FROM ( FROM sma_28019_cte sma_28019_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 ON rss_28018_cte.ds__day = subq_26.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset SELECT rss_28018_cte.ds__day AS metric_time__day , subq_39.buys AS buys FROM rss_28018_cte rss_28018_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'metric_time__day'] -- Aggregate Measures @@ -101,33 +94,36 @@ FROM ( , subq_35.mf_internal_uuid AS mf_internal_uuid , subq_35.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_35 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_35.user + ) AND ( + ( + sma_28019_cte.metric_time__day <= subq_35.metric_time__day + ) AND ( + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_35.metric_time__day) + ) + ) ) subq_36 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_39 ON rss_28018_cte.ds__day = subq_39.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_43 ON subq_30.metric_time__day = subq_43.metric_time__day GROUP BY - COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_44 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql index 5c6806f1cb..1b5bf1c69c 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql @@ -73,47 +73,42 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_3 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_12.visit__referrer_id @@ -224,43 +219,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -375,65 +366,62 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + (subq_6.metric_time__day <= subq_9.metric_time__day) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_13 ON subq_3.visit__referrer_id = subq_13.visit__referrer_id GROUP BY - COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql index 76a7bd37f4..38edbd1524 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql @@ -9,12 +9,11 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -36,10 +35,8 @@ FROM ( FROM sma_28019_cte sma_28019_cte GROUP BY visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys', 'visit__referrer_id'] -- Aggregate Measures @@ -84,29 +81,29 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + (sma_28019_cte.metric_time__day <= subq_23.metric_time__day) + ) ) subq_24 GROUP BY visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 ON subq_18.visit__referrer_id = subq_27.visit__referrer_id GROUP BY - COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + visit__referrer_id ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql index 5d14a4d603..84991f3ec4 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql @@ -77,48 +77,43 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - , subq_2.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_3 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_12.metric_time__day @@ -246,43 +241,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -397,61 +388,66 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + subq_6.session = subq_9.session_id + ) AND ( + ( + subq_6.metric_time__day <= subq_9.metric_time__day + ) AND ( + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) + ) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.metric_time__day - , subq_12.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_13 ON ( @@ -460,8 +456,6 @@ FROM ( subq_3.metric_time__day = subq_13.metric_time__day ) GROUP BY - COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) - , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql index 73962ebb79..26c195210d 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql @@ -9,13 +9,12 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , session_id AS session , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -41,10 +40,8 @@ FROM ( GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] -- Aggregate Measures @@ -103,26 +100,34 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , session_id , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + sma_28019_cte.session = subq_23.session_id + ) AND ( + ( + sma_28019_cte.metric_time__day <= subq_23.metric_time__day + ) AND ( + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) + ) + ) ) subq_24 GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 ON ( @@ -131,8 +136,6 @@ FROM ( subq_18.metric_time__day = subq_27.metric_time__day ) GROUP BY - COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) - , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql index 513be5435d..8b2707c804 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql @@ -69,45 +69,40 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_12.buys) AS buys @@ -206,43 +201,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -357,59 +348,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + ( + subq_6.metric_time__day <= subq_9.metric_time__day + ) AND ( + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) + ) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql index 350b2e846d..e61562f159 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql @@ -10,11 +10,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -26,10 +25,8 @@ FROM ( SELECT SUM(visits) AS visits FROM sma_28019_cte sma_28019_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys',] -- Aggregate Measures @@ -65,21 +62,26 @@ CROSS JOIN , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + ( + sma_28019_cte.metric_time__day <= subq_23.metric_time__day + ) AND ( + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) + ) + ) ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql index e5f047e55a..c8a32b325b 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql @@ -77,48 +77,43 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - , subq_2.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_3 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_12.metric_time__day @@ -231,43 +226,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -382,61 +373,64 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_6.user = subq_9.user + ) AND ( + ( + subq_6.metric_time__day <= subq_9.metric_time__day + ) AND ( + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) + ) + ) ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.metric_time__day - , subq_12.visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_13 ON ( @@ -445,8 +439,6 @@ FROM ( subq_3.metric_time__day = subq_13.metric_time__day ) GROUP BY - COALESCE(subq_3.metric_time__day, subq_13.metric_time__day) - , COALESCE(subq_3.visit__referrer_id, subq_13.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql index d3ea6b40fd..e24946a723 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql @@ -9,12 +9,11 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -40,10 +39,8 @@ FROM ( GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'visit__referrer_id', 'metric_time__day'] -- Aggregate Measures @@ -89,25 +86,31 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_23.user + ) AND ( + ( + sma_28019_cte.metric_time__day <= subq_23.metric_time__day + ) AND ( + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) + ) + ) ) subq_24 GROUP BY metric_time__day , visit__referrer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 ON ( @@ -116,8 +119,6 @@ FROM ( subq_18.metric_time__day = subq_27.metric_time__day ) GROUP BY - COALESCE(subq_18.metric_time__day, subq_27.metric_time__day) - , COALESCE(subq_18.visit__referrer_id, subq_27.visit__referrer_id) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , visit__referrer_id ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql index fc84cba822..497a3d3e4f 100644 --- a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_query_semantic_model__plan0.sql @@ -5,29 +5,28 @@ sql_engine: Clickhouse -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql index a7ef1aa1e4..d69acd77a3 100644 --- a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_with_measures__plan0.sql @@ -10,54 +10,53 @@ sql_engine: Clickhouse -- Read Elements From Semantic Model 'id_verifications' SELECT 1 AS identity_verifications - , DATE_TRUNC('day', id_verifications_src_28000.ds) AS ds__day - , DATE_TRUNC('week', id_verifications_src_28000.ds) AS ds__week - , DATE_TRUNC('month', id_verifications_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', id_verifications_src_28000.ds) AS ds__day + , date_trunc('week', id_verifications_src_28000.ds) AS ds__week + , date_trunc('month', id_verifications_src_28000.ds) AS ds__month + , date_trunc('quarter', id_verifications_src_28000.ds) AS ds__quarter + , date_trunc('year', id_verifications_src_28000.ds) AS ds__year + , toYear(id_verifications_src_28000.ds) AS ds__extract_year + , toQuarter(id_verifications_src_28000.ds) AS ds__extract_quarter + , toMonth(id_verifications_src_28000.ds) AS ds__extract_month + , toDayOfMonth(id_verifications_src_28000.ds) AS ds__extract_day + , toDayOfWeek(id_verifications_src_28000.ds) AS ds__extract_dow + , toDayOfYear(id_verifications_src_28000.ds) AS ds__extract_doy + , date_trunc('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , id_verifications_src_28000.verification_type - , DATE_TRUNC('day', id_verifications_src_28000.ds) AS verification__ds__day - , DATE_TRUNC('week', id_verifications_src_28000.ds) AS verification__ds__week - , DATE_TRUNC('month', id_verifications_src_28000.ds) AS verification__ds__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds) AS verification__ds__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS verification__ds__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS verification__ds__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_doy - , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day - , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week - , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy + , date_trunc('day', id_verifications_src_28000.ds) AS verification__ds__day + , date_trunc('week', id_verifications_src_28000.ds) AS verification__ds__week + , date_trunc('month', id_verifications_src_28000.ds) AS verification__ds__month + , date_trunc('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter + , date_trunc('year', id_verifications_src_28000.ds) AS verification__ds__year + , toYear(id_verifications_src_28000.ds) AS verification__ds__extract_year + , toQuarter(id_verifications_src_28000.ds) AS verification__ds__extract_quarter + , toMonth(id_verifications_src_28000.ds) AS verification__ds__extract_month + , toDayOfMonth(id_verifications_src_28000.ds) AS verification__ds__extract_day + , toDayOfWeek(id_verifications_src_28000.ds) AS verification__ds__extract_dow + , toDayOfYear(id_verifications_src_28000.ds) AS verification__ds__extract_doy + , date_trunc('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day + , date_trunc('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week + , date_trunc('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month + , date_trunc('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter + , date_trunc('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year + , toYear(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year + , toQuarter(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter + , toMonth(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month + , toDayOfMonth(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day + , toDayOfWeek(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow + , toDayOfYear(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy , id_verifications_src_28000.verification_type AS verification__verification_type , id_verifications_src_28000.verification_id AS verification , id_verifications_src_28000.user_id AS user , id_verifications_src_28000.user_id AS verification__user FROM ***************************.fct_id_verifications id_verifications_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql index d89704acd6..959318eac3 100644 --- a/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql +++ b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlPlan/Clickhouse/test_convert_table_semantic_model_without_measures__plan0.sql @@ -6,30 +6,29 @@ sql_engine: Clickhouse --- -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql index 394d63db82..a9b7861f0b 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql @@ -87,13 +87,11 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('week', subq_3.ds) AS metric_time__week - , DATE_TRUNC('quarter', subq_3.ds) AS metric_time__quarter + , date_trunc('week', subq_3.ds) AS metric_time__week + , date_trunc('quarter', subq_3.ds) AS metric_time__quarter FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -136,51 +134,45 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + (subq_1.metric_time__day <= subq_2.metric_time__day) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__week - , subq_5.metric_time__quarter - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week + , metric_time__quarter ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__week - , subq_8.metric_time__quarter - , subq_8.revenue_all_time -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week + , metric_time__quarter + , revenue_all_time diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql index f63e711786..4f344fb2b1 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql @@ -30,22 +30,23 @@ FROM ( -- Compute Metrics via Expressions SELECT subq_12.ds AS metric_time__day - , DATE_TRUNC('week', subq_12.ds) AS metric_time__week - , DATE_TRUNC('quarter', subq_12.ds) AS metric_time__quarter + , date_trunc('week', subq_12.ds) AS metric_time__week + , date_trunc('quarter', subq_12.ds) AS metric_time__quarter , SUM(revenue_src_28000.revenue) AS revenue_all_time FROM ***************************.mf_time_spine subq_12 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) GROUP BY - subq_12.ds - , DATE_TRUNC('week', subq_12.ds) - , DATE_TRUNC('quarter', subq_12.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week + , metric_time__quarter ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY metric_time__week , metric_time__quarter , revenue_all_time -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql index 49e0cdfed5..a6fa9d8b5f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0.sql @@ -61,39 +61,34 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql index 5e9aa03e78..43197e0413 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric__plan0_optimized.sql @@ -10,9 +10,8 @@ sql_engine: Clickhouse -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('day', created_at) AS ds__day + date_trunc('day', created_at) AS ds__day , SUM(revenue) AS trailing_2_months_revenue FROM ***************************.fct_revenue revenue_src_28000 GROUP BY - DATE_TRUNC('day', created_at) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql index c1b1e53199..837e9c140f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0.sql @@ -61,39 +61,34 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.ds__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__month ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql index 24a861dcd3..bd7d06807a 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_grain_to_date__plan0_optimized.sql @@ -10,9 +10,8 @@ sql_engine: Clickhouse -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('month', created_at) AS ds__month + date_trunc('month', created_at) AS ds__month , SUM(revenue) AS revenue_mtd FROM ***************************.fct_revenue revenue_src_28000 GROUP BY - DATE_TRUNC('month', created_at) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql index 7a532f4a9e..798c0c5049 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0.sql @@ -58,37 +58,32 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql index 475e6f4686..05762c6420 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_ds__plan0_optimized.sql @@ -12,4 +12,3 @@ sql_engine: Clickhouse SELECT SUM(revenue) AS trailing_2_months_revenue FROM ***************************.fct_revenue revenue_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql index e158e52a7d..ba87fed91b 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0.sql @@ -61,39 +61,34 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.ds__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__month ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql index c656da3f1a..d5af188c24 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window__plan0_optimized.sql @@ -10,9 +10,8 @@ sql_engine: Clickhouse -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('month', created_at) AS ds__month + date_trunc('month', created_at) AS ds__month , SUM(revenue) AS revenue_all_time FROM ***************************.fct_revenue revenue_src_28000 GROUP BY - DATE_TRUNC('month', created_at) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql index 65f0a3c8da..01fda575b5 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql @@ -102,10 +102,8 @@ FROM ( subq_4.ds AS metric_time__day FROM ***************************.mf_time_spine subq_4 WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - CROSS JOIN - ( + INNER JOIN ( -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] SELECT subq_1.ds__day @@ -187,47 +185,41 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2000-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + (subq_2.metric_time__day <= subq_3.metric_time__day) ) subq_5 WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql index 998ca4d065..23d404ed20 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql @@ -18,21 +18,19 @@ FROM ( ds AS metric_time__day FROM ***************************.mf_time_spine subq_13 WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 -CROSS JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'revenue' -- Metric Time Dimension 'ds' -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , revenue AS txn_revenue FROM ***************************.fct_revenue revenue_src_28000 - WHERE DATE_TRUNC('day', created_at) BETWEEN '2000-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', created_at) BETWEEN '2000-01-01' AND '2020-01-01' ) subq_11 +ON + (subq_11.metric_time__day <= subq_12.metric_time__day) WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' GROUP BY - subq_12.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql index 87cd0ddb58..cd91d52f8d 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql @@ -63,13 +63,11 @@ FROM ( FROM ( -- Read From Time Spine 'mf_time_spine' SELECT - DATE_TRUNC('month', subq_3.ds) AS revenue_instance__ds__month + date_trunc('month', subq_3.ds) AS revenue_instance__ds__month , subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -112,42 +110,42 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.revenue_instance__ds__month - , subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__month + , metric_time__day ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql index a6aba9a4f4..c406d18169 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql @@ -9,13 +9,18 @@ sql_engine: Clickhouse -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('month', subq_10.ds) AS revenue_instance__ds__month + date_trunc('month', subq_10.ds) AS revenue_instance__ds__month , subq_10.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -CROSS JOIN +INNER JOIN ***************************.fct_revenue revenue_src_28000 +ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) + ) GROUP BY - DATE_TRUNC('month', subq_10.ds) - , subq_10.ds -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__month + , metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql index c56b34987f..4e1f2bb68b 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql @@ -62,10 +62,8 @@ FROM ( SELECT subq_3.ds AS revenue_instance__ds__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -108,41 +106,41 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day + ) AND ( + subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.revenue_instance__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__day ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql index 8b7479cafb..3b5eecacbf 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql @@ -12,8 +12,13 @@ SELECT subq_10.ds AS revenue_instance__ds__day , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -CROSS JOIN +INNER JOIN ***************************.fct_revenue revenue_src_28000 +ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) + ) GROUP BY - subq_10.ds -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql index 2b86d0317f..75e5f50c21 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql @@ -64,12 +64,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS revenue_instance__ds__day - , DATE_TRUNC('month', subq_3.ds) AS revenue_instance__ds__month + , date_trunc('month', subq_3.ds) AS revenue_instance__ds__month FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -112,42 +110,42 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day + ) AND ( + subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.revenue_instance__ds__day - , subq_5.revenue_instance__ds__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__day + , revenue_instance__ds__month ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql index 0ceb3156b6..cde9058907 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql @@ -10,12 +10,17 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_10.ds AS revenue_instance__ds__day - , DATE_TRUNC('month', subq_10.ds) AS revenue_instance__ds__month + , date_trunc('month', subq_10.ds) AS revenue_instance__ds__month , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -CROSS JOIN +INNER JOIN ***************************.fct_revenue revenue_src_28000 +ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) + ) GROUP BY - subq_10.ds - , DATE_TRUNC('month', subq_10.ds) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__day + , revenue_instance__ds__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql index 21e81efd3e..e9b9214127 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql @@ -64,12 +64,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('month', subq_3.ds) AS metric_time__month + , date_trunc('month', subq_3.ds) AS metric_time__month FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -112,42 +110,42 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql index ab6c21f75f..a924a5abf8 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql @@ -10,12 +10,17 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_10.ds AS metric_time__day - , DATE_TRUNC('month', subq_10.ds) AS metric_time__month + , date_trunc('month', subq_10.ds) AS metric_time__month , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -CROSS JOIN +INNER JOIN ***************************.fct_revenue revenue_src_28000 +ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) + ) GROUP BY - subq_10.ds - , DATE_TRUNC('month', subq_10.ds) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql index 020134e9f0..da7defe266 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql @@ -229,10 +229,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -351,73 +349,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -425,19 +423,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql index a2d5d44a19..06238ae8c7 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql @@ -21,11 +21,15 @@ FROM ( subq_11.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_11 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_11.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_11.ds) + ) ) subq_12 WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql index b99b3d0cc1..b24598ff66 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql @@ -78,12 +78,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -126,49 +124,43 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + (subq_1.metric_time__day <= subq_2.metric_time__day) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__week - , subq_8.revenue_all_time -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week + , revenue_all_time diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql index 6872d0da21..dcf016f957 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql @@ -24,19 +24,20 @@ FROM ( -- Compute Metrics via Expressions SELECT subq_12.ds AS metric_time__day - , DATE_TRUNC('week', subq_12.ds) AS metric_time__week + , date_trunc('week', subq_12.ds) AS metric_time__week , SUM(revenue_src_28000.revenue) AS revenue_all_time FROM ***************************.mf_time_spine subq_12 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) GROUP BY - subq_12.ds - , DATE_TRUNC('week', subq_12.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY metric_time__week , revenue_all_time -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql index a793f5bd6b..2dc779cc0a 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql @@ -106,10 +106,8 @@ FROM ( subq_4.ds AS metric_time__day FROM ***************************.mf_time_spine subq_4 WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - CROSS JOIN - ( + INNER JOIN ( -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] SELECT subq_1.ds__day @@ -191,47 +189,45 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2019-11-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_2.metric_time__day <= subq_3.metric_time__day + ) AND ( + subq_2.metric_time__day > DATEADD(month, -2, subq_3.metric_time__day) + ) ) subq_5 WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql index 00c33d0fac..61a032c8f0 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql @@ -22,21 +22,23 @@ FROM ( ds AS metric_time__day FROM ***************************.mf_time_spine subq_13 WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 -CROSS JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'revenue' -- Metric Time Dimension 'ds' -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , revenue AS txn_revenue FROM ***************************.fct_revenue revenue_src_28000 - WHERE DATE_TRUNC('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' ) subq_11 +ON + ( + subq_11.metric_time__day <= subq_12.metric_time__day + ) AND ( + subq_11.metric_time__day > DATEADD(month, -2, subq_12.metric_time__day) + ) WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' GROUP BY - subq_12.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql index fdeaa19735..74fc72e7ce 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql @@ -79,12 +79,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -127,51 +125,48 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__week - , subq_8.t2mr - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week + , t2mr ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql index 9b207259c9..d457e047c1 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql @@ -25,21 +25,23 @@ FROM ( -- Aggregate Measures SELECT subq_13.ds AS metric_time__day - , DATE_TRUNC('week', subq_13.ds) AS metric_time__week + , date_trunc('week', subq_13.ds) AS metric_time__week , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_13 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) + ) GROUP BY - subq_13.ds - , DATE_TRUNC('week', subq_13.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__week ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 GROUP BY metric_time__week , t2mr - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql index 73431f417f..4e37b7556a 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql @@ -78,12 +78,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('month', subq_3.ds) AS metric_time__month + , date_trunc('month', subq_3.ds) AS metric_time__month FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -126,49 +124,47 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__month - , subq_8.revenue_mtd -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month + , revenue_mtd diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql index b67bdf61ac..ae5b0cd351 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql @@ -24,19 +24,22 @@ FROM ( -- Compute Metrics via Expressions SELECT subq_12.ds AS metric_time__day - , DATE_TRUNC('month', subq_12.ds) AS metric_time__month + , date_trunc('month', subq_12.ds) AS metric_time__month , SUM(revenue_src_28000.revenue) AS revenue_mtd FROM ***************************.mf_time_spine subq_12 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) + ) GROUP BY - subq_12.ds - , DATE_TRUNC('month', subq_12.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY metric_time__month , revenue_mtd -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql index d0f2aecb9d..aee9b6c45f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql @@ -86,14 +86,12 @@ FROM ( FROM ( -- Read From Time Spine 'mf_time_spine' SELECT - DATE_TRUNC('quarter', subq_3.ds) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', subq_3.ds) AS revenue_instance__ds__year + date_trunc('quarter', subq_3.ds) AS revenue_instance__ds__quarter + , date_trunc('year', subq_3.ds) AS revenue_instance__ds__year , subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -136,51 +134,49 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.revenue_instance__ds__quarter - , subq_5.revenue_instance__ds__year - , subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__quarter + , revenue_instance__ds__year + , metric_time__day ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.revenue_instance__ds__quarter - , subq_8.revenue_instance__ds__year - , subq_8.revenue_mtd -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__quarter + , revenue_instance__ds__year + , revenue_mtd diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql index 3834087e40..217bf116ec 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql @@ -29,23 +29,26 @@ FROM ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('quarter', subq_12.ds) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', subq_12.ds) AS revenue_instance__ds__year + date_trunc('quarter', subq_12.ds) AS revenue_instance__ds__quarter + , date_trunc('year', subq_12.ds) AS revenue_instance__ds__year , subq_12.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS revenue_mtd FROM ***************************.mf_time_spine subq_12 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) + ) GROUP BY - DATE_TRUNC('quarter', subq_12.ds) - , DATE_TRUNC('year', subq_12.ds) - , subq_12.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + revenue_instance__ds__quarter + , revenue_instance__ds__year + , metric_time__day ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY revenue_instance__ds__quarter , revenue_instance__ds__year , revenue_mtd -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql index 850fb0cd4b..a93d49bada 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql @@ -74,12 +74,10 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT subq_3.ds AS metric_time__day - , DATE_TRUNC('year', subq_3.ds) AS metric_time__year + , date_trunc('year', subq_3.ds) AS metric_time__year FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -122,49 +120,47 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - , subq_5.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__year ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__year - , subq_8.trailing_2_months_revenue -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year + , trailing_2_months_revenue diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql index dda45086a5..05f97642f5 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql @@ -20,19 +20,22 @@ FROM ( -- Aggregate Measures SELECT subq_12.ds AS metric_time__day - , DATE_TRUNC('year', subq_12.ds) AS metric_time__year + , date_trunc('year', subq_12.ds) AS metric_time__year , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_12 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_12.ds) + ) GROUP BY - subq_12.ds - , DATE_TRUNC('year', subq_12.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__year ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY metric_time__year , trailing_2_months_revenue -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql index 88b7389459..70fe666e69 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql @@ -8,47 +8,47 @@ sql_engine: Clickhouse --- -- Re-aggregate Metric via Group By SELECT - subq_12.booking__ds__month - , subq_12.metric_time__week + subq_12.metric_time__week + , subq_12.booking__ds__month , subq_12.every_two_days_bookers_fill_nulls_with_0 FROM ( -- Window Function for Metric Re-aggregation SELECT - subq_11.booking__ds__month - , subq_11.metric_time__week + subq_11.metric_time__week + , subq_11.booking__ds__month , FIRST_VALUE(subq_11.every_two_days_bookers_fill_nulls_with_0) OVER ( PARTITION BY - subq_11.booking__ds__month - , subq_11.metric_time__week + subq_11.metric_time__week + , subq_11.booking__ds__month ORDER BY subq_11.metric_time__day ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS every_two_days_bookers_fill_nulls_with_0 FROM ( -- Compute Metrics via Expressions SELECT - subq_10.booking__ds__month + subq_10.metric_time__day , subq_10.metric_time__week - , subq_10.metric_time__day + , subq_10.booking__ds__month , COALESCE(subq_10.bookers, 0) AS every_two_days_bookers_fill_nulls_with_0 FROM ( -- Join to Time Spine Dataset SELECT - subq_9.booking__ds__month AS booking__ds__month + subq_9.metric_time__day AS metric_time__day , subq_9.metric_time__week AS metric_time__week - , subq_9.metric_time__day AS metric_time__day + , subq_9.booking__ds__month AS booking__ds__month , subq_6.bookers AS bookers FROM ( -- Pass Only Elements: ['booking__ds__month', 'metric_time__week', 'metric_time__day'] SELECT - subq_8.booking__ds__month + subq_8.metric_time__day , subq_8.metric_time__week - , subq_8.metric_time__day + , subq_8.booking__ds__month FROM ( -- Change Column Aliases SELECT - subq_7.ds__month AS booking__ds__month + subq_7.ds__day AS metric_time__day , subq_7.ds__week AS metric_time__week - , subq_7.ds__day AS metric_time__day + , subq_7.ds__month AS booking__ds__month , subq_7.ds__quarter , subq_7.ds__year , subq_7.ds__extract_year @@ -62,26 +62,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_5.booking__ds__month @@ -199,14 +195,12 @@ FROM ( FROM ( -- Read From Time Spine 'mf_time_spine' SELECT - DATE_TRUNC('month', subq_3.ds) AS booking__ds__month + date_trunc('month', subq_3.ds) AS booking__ds__month , subq_3.ds AS metric_time__day - , DATE_TRUNC('week', subq_3.ds) AS metric_time__week + , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -325,73 +319,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -399,30 +393,27 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.booking__ds__month - , subq_5.metric_time__day - , subq_5.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__month + , metric_time__day + , metric_time__week ) subq_6 ON subq_9.metric_time__day = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.booking__ds__month - , subq_12.metric_time__week - , subq_12.every_two_days_bookers_fill_nulls_with_0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week + , booking__ds__month + , every_two_days_bookers_fill_nulls_with_0 diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql index 4e2ad03780..70587a6e64 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql @@ -8,57 +8,58 @@ sql_engine: Clickhouse --- -- Re-aggregate Metric via Group By SELECT - booking__ds__month - , metric_time__week + metric_time__week + , booking__ds__month , every_two_days_bookers_fill_nulls_with_0 FROM ( -- Compute Metrics via Expressions -- Window Function for Metric Re-aggregation SELECT - booking__ds__month - , metric_time__week + metric_time__week + , booking__ds__month , FIRST_VALUE(COALESCE(bookers, 0)) OVER ( PARTITION BY - booking__ds__month - , metric_time__week + metric_time__week + , booking__ds__month ORDER BY metric_time__day ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS every_two_days_bookers_fill_nulls_with_0 FROM ( -- Join to Time Spine Dataset SELECT - DATE_TRUNC('month', time_spine_src_28006.ds) AS booking__ds__month - , DATE_TRUNC('week', time_spine_src_28006.ds) AS metric_time__week - , time_spine_src_28006.ds AS metric_time__day + time_spine_src_28006.ds AS metric_time__day + , date_trunc('week', time_spine_src_28006.ds) AS metric_time__week + , date_trunc('month', time_spine_src_28006.ds) AS booking__ds__month , subq_19.bookers AS bookers FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Join Self Over Time Range -- Pass Only Elements: ['bookers', 'metric_time__week', 'booking__ds__month', 'metric_time__day'] -- Aggregate Measures SELECT - DATE_TRUNC('month', subq_16.ds) AS booking__ds__month + date_trunc('month', subq_16.ds) AS booking__ds__month , subq_16.ds AS metric_time__day - , DATE_TRUNC('week', subq_16.ds) AS metric_time__week + , date_trunc('week', subq_16.ds) AS metric_time__week , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers FROM ***************************.mf_time_spine subq_16 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) + ) GROUP BY - DATE_TRUNC('month', subq_16.ds) - , subq_16.ds - , DATE_TRUNC('week', subq_16.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__month + , metric_time__day + , metric_time__week ) subq_19 ON time_spine_src_28006.ds = subq_19.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 GROUP BY - booking__ds__month - , metric_time__week + metric_time__week + , booking__ds__month , every_two_days_bookers_fill_nulls_with_0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt index e3cc60cfef..39b897706a 100644 --- a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_cumulative_metric_with_non_adjustable_filter__query_output.txt @@ -5,5 +5,5 @@ docstring: --- metric_time__day trailing_2_months_revenue ------------------- --------------------------- -2020-03-15T00:00:00 12000 -2020-04-30T00:00:00 12000 +2020-03-15T00:00:00 7000 +2020-04-30T00:00:00 7000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt index c8d7c5e387..91e85d02d3 100644 --- a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_grain_to_date_cumulative_metric__query_output.txt @@ -5,7 +5,7 @@ docstring: --- metric_time__day revenue_mtd ------------------- ------------- -2021-01-03T00:00:00 4000 +2021-01-03T00:00:00 3000 2021-01-04T00:00:00 4000 2021-01-05T00:00:00 4000 2021-01-06T00:00:00 4000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt index 7f6a0b7319..e92c6458dc 100644 --- a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_multiple_cumulative_metrics__query_output.txt @@ -5,65 +5,65 @@ docstring: --- metric_time__day revenue_all_time trailing_2_months_revenue ------------------- ------------------ --------------------------- -2020-03-31T00:00:00 12000 11000 -2020-04-01T00:00:00 12000 11000 -2020-04-02T00:00:00 12000 11000 -2020-04-03T00:00:00 12000 11000 -2020-04-04T00:00:00 12000 11000 -2020-04-05T00:00:00 12000 11000 -2020-04-06T00:00:00 12000 11000 -2020-04-07T00:00:00 12000 11000 -2020-04-08T00:00:00 12000 11000 -2020-04-09T00:00:00 12000 11000 -2020-04-10T00:00:00 12000 11000 -2020-04-11T00:00:00 12000 11000 -2020-04-12T00:00:00 12000 11000 -2020-04-13T00:00:00 12000 11000 -2020-04-14T00:00:00 12000 11000 -2020-04-15T00:00:00 12000 11000 -2020-04-16T00:00:00 12000 11000 -2020-04-17T00:00:00 12000 11000 -2020-04-18T00:00:00 12000 11000 -2020-04-19T00:00:00 12000 11000 -2020-04-20T00:00:00 12000 11000 -2020-04-21T00:00:00 12000 11000 -2020-04-22T00:00:00 12000 11000 -2020-04-23T00:00:00 12000 11000 -2020-04-24T00:00:00 12000 11000 -2020-04-25T00:00:00 12000 11000 -2020-04-26T00:00:00 12000 11000 -2020-04-27T00:00:00 12000 11000 -2020-04-28T00:00:00 12000 11000 -2020-04-29T00:00:00 12000 11000 -2020-04-30T00:00:00 12000 11000 -2020-05-01T00:00:00 12000 11000 -2020-05-02T00:00:00 12000 11000 -2020-05-03T00:00:00 12000 11000 -2020-05-04T00:00:00 12000 11000 -2020-05-05T00:00:00 12000 11000 -2020-05-06T00:00:00 12000 11000 -2020-05-07T00:00:00 12000 11000 -2020-05-08T00:00:00 12000 11000 -2020-05-09T00:00:00 12000 11000 -2020-05-10T00:00:00 12000 11000 -2020-05-11T00:00:00 12000 11000 -2020-05-12T00:00:00 12000 11000 -2020-05-13T00:00:00 12000 11000 -2020-05-14T00:00:00 12000 11000 -2020-05-15T00:00:00 12000 11000 -2020-05-16T00:00:00 12000 11000 -2020-05-17T00:00:00 12000 11000 -2020-05-18T00:00:00 12000 11000 -2020-05-19T00:00:00 12000 11000 -2020-05-20T00:00:00 12000 11000 -2020-05-21T00:00:00 12000 11000 -2020-05-22T00:00:00 12000 11000 -2020-05-23T00:00:00 12000 11000 -2020-05-24T00:00:00 12000 11000 -2020-05-25T00:00:00 12000 11000 -2020-05-26T00:00:00 12000 11000 -2020-05-27T00:00:00 12000 11000 -2020-05-28T00:00:00 12000 11000 -2020-05-29T00:00:00 12000 11000 -2020-05-30T00:00:00 12000 11000 -2020-05-31T00:00:00 12000 11000 +2020-03-31T00:00:00 8000 7000 +2020-04-01T00:00:00 8000 3000 +2020-04-02T00:00:00 12000 7000 +2020-04-03T00:00:00 12000 7000 +2020-04-04T00:00:00 12000 7000 +2020-04-05T00:00:00 12000 7000 +2020-04-06T00:00:00 12000 7000 +2020-04-07T00:00:00 12000 7000 +2020-04-08T00:00:00 12000 7000 +2020-04-09T00:00:00 12000 7000 +2020-04-10T00:00:00 12000 7000 +2020-04-11T00:00:00 12000 7000 +2020-04-12T00:00:00 12000 7000 +2020-04-13T00:00:00 12000 7000 +2020-04-14T00:00:00 12000 7000 +2020-04-15T00:00:00 12000 7000 +2020-04-16T00:00:00 12000 7000 +2020-04-17T00:00:00 12000 7000 +2020-04-18T00:00:00 12000 7000 +2020-04-19T00:00:00 12000 7000 +2020-04-20T00:00:00 12000 7000 +2020-04-21T00:00:00 12000 7000 +2020-04-22T00:00:00 12000 7000 +2020-04-23T00:00:00 12000 7000 +2020-04-24T00:00:00 12000 7000 +2020-04-25T00:00:00 12000 7000 +2020-04-26T00:00:00 12000 7000 +2020-04-27T00:00:00 12000 7000 +2020-04-28T00:00:00 12000 7000 +2020-04-29T00:00:00 12000 7000 +2020-04-30T00:00:00 12000 7000 +2020-05-01T00:00:00 12000 4000 +2020-05-02T00:00:00 12000 4000 +2020-05-03T00:00:00 12000 4000 +2020-05-04T00:00:00 12000 4000 +2020-05-05T00:00:00 12000 4000 +2020-05-06T00:00:00 12000 4000 +2020-05-07T00:00:00 12000 4000 +2020-05-08T00:00:00 12000 4000 +2020-05-09T00:00:00 12000 4000 +2020-05-10T00:00:00 12000 4000 +2020-05-11T00:00:00 12000 4000 +2020-05-12T00:00:00 12000 4000 +2020-05-13T00:00:00 12000 4000 +2020-05-14T00:00:00 12000 4000 +2020-05-15T00:00:00 12000 4000 +2020-05-16T00:00:00 12000 4000 +2020-05-17T00:00:00 12000 4000 +2020-05-18T00:00:00 12000 4000 +2020-05-19T00:00:00 12000 4000 +2020-05-20T00:00:00 12000 4000 +2020-05-21T00:00:00 12000 4000 +2020-05-22T00:00:00 12000 4000 +2020-05-23T00:00:00 12000 4000 +2020-05-24T00:00:00 12000 4000 +2020-05-25T00:00:00 12000 4000 +2020-05-26T00:00:00 12000 4000 +2020-05-27T00:00:00 12000 4000 +2020-05-28T00:00:00 12000 4000 +2020-05-29T00:00:00 12000 4000 +2020-05-30T00:00:00 12000 4000 +2020-05-31T00:00:00 12000 4000 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt index 669857c23f..641ab6577c 100644 --- a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_non_additive_cumulative_metric__query_output.txt @@ -5,7 +5,6 @@ docstring: --- metric_time__day every_two_days_bookers ------------------- ------------------------ -2019-12-31T00:00:00 6 -2020-01-01T00:00:00 6 +2020-01-01T00:00:00 3 2020-01-02T00:00:00 6 -2020-01-03T00:00:00 6 +2020-01-03T00:00:00 4 diff --git a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt index e6f9425604..bc6799521b 100644 --- a/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt +++ b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Clickhouse/test_simple_cumulative_metric__query_output.txt @@ -5,93 +5,93 @@ docstring: --- metric_time__day trailing_2_months_revenue ------------------- --------------------------- -2020-02-01T00:00:00 12000 -2020-02-02T00:00:00 12000 -2020-02-03T00:00:00 12000 -2020-02-04T00:00:00 12000 -2020-02-05T00:00:00 12000 -2020-02-06T00:00:00 12000 -2020-02-07T00:00:00 12000 -2020-02-08T00:00:00 12000 -2020-02-09T00:00:00 12000 -2020-02-10T00:00:00 12000 -2020-02-11T00:00:00 12000 -2020-02-12T00:00:00 12000 -2020-02-13T00:00:00 12000 -2020-02-14T00:00:00 12000 -2020-02-15T00:00:00 12000 -2020-02-16T00:00:00 12000 -2020-02-17T00:00:00 12000 -2020-02-18T00:00:00 12000 -2020-02-19T00:00:00 12000 -2020-02-20T00:00:00 12000 -2020-02-21T00:00:00 12000 -2020-02-22T00:00:00 12000 -2020-02-23T00:00:00 12000 -2020-02-24T00:00:00 12000 -2020-02-25T00:00:00 12000 -2020-02-26T00:00:00 12000 -2020-02-27T00:00:00 12000 -2020-02-28T00:00:00 12000 -2020-02-29T00:00:00 12000 -2020-03-01T00:00:00 12000 -2020-03-02T00:00:00 12000 -2020-03-03T00:00:00 12000 -2020-03-04T00:00:00 12000 -2020-03-05T00:00:00 12000 -2020-03-06T00:00:00 12000 -2020-03-07T00:00:00 12000 -2020-03-08T00:00:00 12000 -2020-03-09T00:00:00 12000 -2020-03-10T00:00:00 12000 -2020-03-11T00:00:00 12000 -2020-03-12T00:00:00 12000 -2020-03-13T00:00:00 12000 -2020-03-14T00:00:00 12000 -2020-03-15T00:00:00 12000 -2020-03-16T00:00:00 12000 -2020-03-17T00:00:00 12000 -2020-03-18T00:00:00 12000 -2020-03-19T00:00:00 12000 -2020-03-20T00:00:00 12000 -2020-03-21T00:00:00 12000 -2020-03-22T00:00:00 12000 -2020-03-23T00:00:00 12000 -2020-03-24T00:00:00 12000 -2020-03-25T00:00:00 12000 -2020-03-26T00:00:00 12000 -2020-03-27T00:00:00 12000 -2020-03-28T00:00:00 12000 -2020-03-29T00:00:00 12000 -2020-03-30T00:00:00 12000 -2020-03-31T00:00:00 12000 -2020-04-01T00:00:00 12000 -2020-04-02T00:00:00 12000 -2020-04-03T00:00:00 12000 -2020-04-04T00:00:00 12000 -2020-04-05T00:00:00 12000 -2020-04-06T00:00:00 12000 -2020-04-07T00:00:00 12000 -2020-04-08T00:00:00 12000 -2020-04-09T00:00:00 12000 -2020-04-10T00:00:00 12000 -2020-04-11T00:00:00 12000 -2020-04-12T00:00:00 12000 -2020-04-13T00:00:00 12000 -2020-04-14T00:00:00 12000 -2020-04-15T00:00:00 12000 -2020-04-16T00:00:00 12000 -2020-04-17T00:00:00 12000 -2020-04-18T00:00:00 12000 -2020-04-19T00:00:00 12000 -2020-04-20T00:00:00 12000 -2020-04-21T00:00:00 12000 -2020-04-22T00:00:00 12000 -2020-04-23T00:00:00 12000 -2020-04-24T00:00:00 12000 -2020-04-25T00:00:00 12000 -2020-04-26T00:00:00 12000 -2020-04-27T00:00:00 12000 -2020-04-28T00:00:00 12000 -2020-04-29T00:00:00 12000 -2020-04-30T00:00:00 12000 +2020-02-01T00:00:00 5000 +2020-02-02T00:00:00 5000 +2020-02-03T00:00:00 5000 +2020-02-04T00:00:00 5000 +2020-02-05T00:00:00 5000 +2020-02-06T00:00:00 5000 +2020-02-07T00:00:00 5000 +2020-02-08T00:00:00 5000 +2020-02-09T00:00:00 5000 +2020-02-10T00:00:00 5000 +2020-02-11T00:00:00 5000 +2020-02-12T00:00:00 5000 +2020-02-13T00:00:00 5000 +2020-02-14T00:00:00 5000 +2020-02-15T00:00:00 5000 +2020-02-16T00:00:00 5000 +2020-02-17T00:00:00 5000 +2020-02-18T00:00:00 5000 +2020-02-19T00:00:00 5000 +2020-02-20T00:00:00 5000 +2020-02-21T00:00:00 5000 +2020-02-22T00:00:00 5000 +2020-02-23T00:00:00 5000 +2020-02-24T00:00:00 5000 +2020-02-25T00:00:00 5000 +2020-02-26T00:00:00 5000 +2020-02-27T00:00:00 5000 +2020-02-28T00:00:00 5000 +2020-02-29T00:00:00 5000 +2020-03-01T00:00:00 7000 +2020-03-02T00:00:00 7000 +2020-03-03T00:00:00 7000 +2020-03-04T00:00:00 7000 +2020-03-05T00:00:00 7000 +2020-03-06T00:00:00 7000 +2020-03-07T00:00:00 7000 +2020-03-08T00:00:00 7000 +2020-03-09T00:00:00 7000 +2020-03-10T00:00:00 7000 +2020-03-11T00:00:00 7000 +2020-03-12T00:00:00 7000 +2020-03-13T00:00:00 7000 +2020-03-14T00:00:00 7000 +2020-03-15T00:00:00 7000 +2020-03-16T00:00:00 7000 +2020-03-17T00:00:00 7000 +2020-03-18T00:00:00 7000 +2020-03-19T00:00:00 7000 +2020-03-20T00:00:00 7000 +2020-03-21T00:00:00 7000 +2020-03-22T00:00:00 7000 +2020-03-23T00:00:00 7000 +2020-03-24T00:00:00 7000 +2020-03-25T00:00:00 7000 +2020-03-26T00:00:00 7000 +2020-03-27T00:00:00 7000 +2020-03-28T00:00:00 7000 +2020-03-29T00:00:00 7000 +2020-03-30T00:00:00 7000 +2020-03-31T00:00:00 7000 +2020-04-01T00:00:00 3000 +2020-04-02T00:00:00 7000 +2020-04-03T00:00:00 7000 +2020-04-04T00:00:00 7000 +2020-04-05T00:00:00 7000 +2020-04-06T00:00:00 7000 +2020-04-07T00:00:00 7000 +2020-04-08T00:00:00 7000 +2020-04-09T00:00:00 7000 +2020-04-10T00:00:00 7000 +2020-04-11T00:00:00 7000 +2020-04-12T00:00:00 7000 +2020-04-13T00:00:00 7000 +2020-04-14T00:00:00 7000 +2020-04-15T00:00:00 7000 +2020-04-16T00:00:00 7000 +2020-04-17T00:00:00 7000 +2020-04-18T00:00:00 7000 +2020-04-19T00:00:00 7000 +2020-04-20T00:00:00 7000 +2020-04-21T00:00:00 7000 +2020-04-22T00:00:00 7000 +2020-04-23T00:00:00 7000 +2020-04-24T00:00:00 7000 +2020-04-25T00:00:00 7000 +2020-04-26T00:00:00 7000 +2020-04-27T00:00:00 7000 +2020-04-28T00:00:00 7000 +2020-04-29T00:00:00 7000 +2020-04-30T00:00:00 7000 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql index 16052b150a..4ef5bca951 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql @@ -73,51 +73,46 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_14.metric_time__martian_day @@ -230,47 +225,43 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 LEFT OUTER JOIN ***************************.mf_time_spine subq_6 ON subq_5.ds__day = subq_6.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -385,65 +376,66 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + ( + subq_8.metric_time__day <= subq_11.metric_time__day + ) AND ( + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) + ) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_15 ON subq_4.metric_time__martian_day = subq_15.metric_time__martian_day GROUP BY - COALESCE(subq_4.metric_time__martian_day, subq_15.metric_time__martian_day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql index 9e5d530194..74bbfb05e6 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -37,11 +36,9 @@ FROM ( ON sma_28019_cte.metric_time__day = subq_18.ds GROUP BY - subq_18.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_21 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'metric_time__martian_day'] -- Aggregate Measures @@ -99,31 +96,34 @@ FROM ( ***************************.mf_time_spine subq_22 ON sma_28019_cte.metric_time__day = subq_22.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_24.user = subq_27.user + ) AND ( + ( + subq_24.metric_time__day <= subq_27.metric_time__day + ) AND ( + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) + ) + ) ) subq_28 GROUP BY metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_21.metric_time__martian_day = subq_31.metric_time__martian_day GROUP BY - COALESCE(subq_21.metric_time__martian_day, subq_31.metric_time__martian_day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql index 801bd533f2..c0cb1e62ff 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql @@ -118,54 +118,48 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_16.metric_time__martian_day @@ -323,50 +317,45 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -481,65 +470,66 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_10.user = subq_13.user + ) AND ( + ( + subq_10.metric_time__day <= subq_13.metric_time__day + ) AND ( + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) + ) + ) ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY - subq_16.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_17 ON subq_5.metric_time__martian_day = subq_17.metric_time__martian_day GROUP BY - COALESCE(subq_5.metric_time__martian_day, subq_17.metric_time__martian_day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql index 3e93a6bf2f..37b65a8181 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -41,15 +40,12 @@ FROM ( ***************************.mf_time_spine subq_20 ON sma_28019_cte.metric_time__day = subq_20.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'metric_time__martian_day'] -- Aggregate Measures @@ -114,34 +110,36 @@ FROM ( ***************************.mf_time_spine subq_25 ON sma_28019_cte.metric_time__day = subq_25.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_28.user = subq_31.user + ) AND ( + ( + subq_28.metric_time__day <= subq_31.metric_time__day + ) AND ( + subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) + ) + ) ) subq_32 GROUP BY metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_35 ON subq_24.metric_time__martian_day = subq_35.metric_time__martian_day GROUP BY - COALESCE(subq_24.metric_time__martian_day, subq_35.metric_time__martian_day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_36 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index bdd0e6fc64..5ff7b26cd3 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -114,52 +114,46 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - CROSS JOIN - ( + CROSS JOIN ( -- Aggregate Measures SELECT SUM(subq_16.buys) AS buys @@ -315,50 +309,45 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -473,59 +462,60 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_10.user = subq_13.user + ) AND ( + ( + subq_10.metric_time__day <= subq_13.metric_time__day + ) AND ( + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) + ) + ) ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index d84b355281..1f40ee482a 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -8,11 +8,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,13 +33,10 @@ FROM ( ***************************.mf_time_spine subq_20 ON sma_28019_cte.metric_time__day = subq_20.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 -CROSS JOIN -( +CROSS JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys',] -- Aggregate Measures @@ -104,26 +100,29 @@ CROSS JOIN ***************************.mf_time_spine subq_25 ON sma_28019_cte.metric_time__day = subq_25.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_28.user = subq_31.user + ) AND ( + ( + subq_28.metric_time__day <= subq_31.metric_time__day + ) AND ( + subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) + ) + ) ) subq_32 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_35 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql index f935f709b4..2f156279a3 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql @@ -75,10 +75,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -121,53 +119,51 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + ) LEFT OUTER JOIN ***************************.mf_time_spine subq_4 ON subq_2.metric_time__day = subq_4.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__martian_day - , subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day + , metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.metric_time__martian_day - , subq_9.trailing_2_months_revenue -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day + , trailing_2_months_revenue diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql index efe5fef9b2..995ab55f67 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql @@ -22,20 +22,23 @@ FROM ( , subq_13.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_13 - CROSS JOIN + INNER JOIN ***************************.fct_revenue revenue_src_28000 + ON + ( + date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) + ) LEFT OUTER JOIN ***************************.mf_time_spine subq_14 ON subq_13.ds = subq_14.ds GROUP BY - subq_14.martian_day - , subq_13.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day + , metric_time__day ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 GROUP BY metric_time__martian_day , trailing_2_months_revenue -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql index ed30f64e9a..f53f35d917 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0.sql @@ -148,73 +148,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -222,24 +222,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.booking__ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.booking__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.booking__ds__martian_day @@ -375,73 +369,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -449,26 +443,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.booking__ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.booking__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_5.booking__ds__martian_day = subq_11.booking__ds__martian_day GROUP BY - COALESCE(subq_5.booking__ds__martian_day, subq_11.booking__ds__martian_day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_12 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql index 5699f3913e..fad9ee9349 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_derived_metric_with_custom_granularity__plan0_optimized.sql @@ -20,9 +20,7 @@ FROM ( LEFT OUTER JOIN ***************************.mf_time_spine subq_14 ON - DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_14.ds + date_trunc('day', bookings_source_src_28000.ds) = subq_14.ds GROUP BY - subq_14.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql index 65114409a2..b8b7769b1c 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0.sql @@ -18,8 +18,7 @@ FROM ( FROM ( -- Change Column Aliases SELECT - subq_5.ds__martian_day AS metric_time__martian_day - , subq_5.ds__day AS metric_time__day + subq_5.ds__day AS metric_time__day , subq_5.ds__week , subq_5.ds__month , subq_5.ds__quarter @@ -30,32 +29,29 @@ FROM ( , subq_5.ds__extract_day , subq_5.ds__extract_dow , subq_5.ds__extract_doy + , subq_5.ds__martian_day AS metric_time__martian_day FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_7 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__martian_day @@ -186,73 +182,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -260,22 +256,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_4 ON subq_7.metric_time__martian_day = subq_4.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql index dd9c858760..846b623b31 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_time_spine_metric_grouped_by_custom_grain__plan0_optimized.sql @@ -15,11 +15,9 @@ FROM ( martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_16 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Metric Time Dimension 'ds' -- Join to Custom Granularity Dataset -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] @@ -31,18 +29,15 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 LEFT OUTER JOIN ***************************.mf_time_spine subq_10 ON subq_9.ds__day = subq_10.ds GROUP BY - subq_10.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_13 ON subq_16.metric_time__martian_day = subq_13.metric_time__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql index f768241a5b..9093730d08 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql @@ -18,7 +18,8 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_7.ds__week + subq_7.metric_time__day + , subq_7.ds__week , subq_7.ds__month , subq_7.ds__quarter , subq_7.ds__year @@ -29,12 +30,10 @@ FROM ( , subq_7.ds__extract_dow , subq_7.ds__extract_doy , subq_7.metric_time__martian_day - , subq_7.metric_time__day FROM ( -- Change Column Aliases SELECT - subq_6.ds__martian_day AS metric_time__martian_day - , subq_6.ds__day AS metric_time__day + subq_6.ds__day AS metric_time__day , subq_6.ds__week , subq_6.ds__month , subq_6.ds__quarter @@ -45,35 +44,31 @@ FROM ( , subq_6.ds__extract_day , subq_6.ds__extract_dow , subq_6.ds__extract_doy + , subq_6.ds__martian_day AS metric_time__martian_day FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_9 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_4.metric_time__martian_day @@ -306,73 +301,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -380,25 +375,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_5 ON subq_9.metric_time__martian_day = subq_5.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql index 670c8fcc81..dd8bf6af2f 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -18,15 +18,12 @@ FROM ( SELECT martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__martian_day'] -- Aggregate Measures @@ -43,21 +40,17 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 LEFT OUTER JOIN ***************************.mf_time_spine subq_12 ON subq_11.ds__day = subq_12.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 ON subq_20.metric_time__martian_day = subq_16.metric_time__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index 155f4a918e..7aa8609d16 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -18,7 +18,8 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_7.ds__week + subq_7.metric_time__day + , subq_7.ds__week , subq_7.ds__month , subq_7.ds__quarter , subq_7.ds__year @@ -28,13 +29,11 @@ FROM ( , subq_7.ds__extract_day , subq_7.ds__extract_dow , subq_7.ds__extract_doy - , subq_7.metric_time__day , subq_7.metric_time__martian_day FROM ( -- Change Column Aliases SELECT subq_6.ds__day AS metric_time__day - , subq_6.ds__martian_day AS metric_time__martian_day , subq_6.ds__week , subq_6.ds__month , subq_6.ds__quarter @@ -45,33 +44,29 @@ FROM ( , subq_6.ds__extract_day , subq_6.ds__extract_dow , subq_6.ds__extract_doy + , subq_6.ds__martian_day AS metric_time__martian_day FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_4.metric_time__day @@ -304,73 +299,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -378,25 +373,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_5 ON subq_9.metric_time__day = subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index d1f99daf82..1508583cbe 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -19,13 +19,10 @@ FROM ( ds AS metric_time__day , martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -43,21 +40,17 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 LEFT OUTER JOIN ***************************.mf_time_spine subq_12 ON subq_11.ds__day = subq_12.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 ON subq_20.metric_time__day = subq_16.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql index a841d418d7..d4d3a16d4e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0.sql @@ -97,53 +97,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -151,19 +151,14 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__martian_day - , subq_3.listing__ds__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day + , listing__ds__month ) subq_4 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql index de69c88b00..6d0d7d693a 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql @@ -15,16 +15,14 @@ FROM ( -- Read Elements From Semantic Model 'listings_latest' SELECT 1 AS listings - , DATE_TRUNC('day', created_at) AS ds__day - , DATE_TRUNC('month', created_at) AS listing__ds__month + , date_trunc('day', created_at) AS ds__day + , date_trunc('month', created_at) AS listing__ds__month FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 LEFT OUTER JOIN ***************************.mf_time_spine subq_6 ON subq_5.ds__day = subq_6.ds GROUP BY - subq_6.martian_day - , subq_5.listing__ds__month -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day + , listing__ds__month diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql index 9dbdd5ac72..50ff999c17 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0.sql @@ -143,73 +143,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -217,24 +217,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.metric_time__martian_day @@ -327,53 +321,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -381,24 +375,18 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_5.metric_time__martian_day = subq_11.metric_time__martian_day GROUP BY - COALESCE(subq_5.metric_time__martian_day, subq_11.metric_time__martian_day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql index 5bc9148a99..ee28f7d8c6 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_multiple_metrics_with_custom_granularity__plan0_optimized.sql @@ -20,20 +20,17 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 LEFT OUTER JOIN ***************************.mf_time_spine subq_13 ON subq_12.ds__day = subq_13.ds GROUP BY - subq_13.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_17 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Metric Time Dimension 'ds' -- Join to Custom Granularity Dataset -- Pass Only Elements: ['listings', 'metric_time__martian_day'] @@ -46,20 +43,17 @@ FULL OUTER JOIN -- Read Elements From Semantic Model 'listings_latest' SELECT 1 AS listings - , DATE_TRUNC('day', created_at) AS ds__day + , date_trunc('day', created_at) AS ds__day FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 LEFT OUTER JOIN ***************************.mf_time_spine subq_19 ON subq_18.ds__day = subq_19.ds GROUP BY - subq_19.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_23 ON subq_17.metric_time__martian_day = subq_23.metric_time__martian_day GROUP BY - COALESCE(subq_17.metric_time__martian_day, subq_23.metric_time__martian_day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql index 954d08ad9d..c08a7422bd 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0.sql @@ -200,188 +200,186 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - CROSS JOIN - ( + CROSS JOIN ( -- Pass Only Elements: ['metric_time__day',] SELECT subq_2.metric_time__day @@ -416,23 +414,20 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 LEFT OUTER JOIN ***************************.mf_time_spine subq_4 @@ -442,11 +437,9 @@ FROM ( ***************************.mf_time_spine subq_5 ON subq_0.user__bio_added_ts__day = subq_5.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.user__bio_added_ts__martian_day - , subq_6.metric_time__martian_day - , subq_6.user__bio_added_ts__month - , subq_6.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__bio_added_ts__martian_day + , metric_time__martian_day + , user__bio_added_ts__month + , metric_time__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql index d01dbdbcc6..190583247e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_joined_to_non_default_grain__plan0_optimized.sql @@ -9,7 +9,7 @@ sql_engine: Clickhouse SELECT subq_12.martian_day AS user__bio_added_ts__martian_day , subq_11.martian_day AS metric_time__martian_day - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month , time_spine_src_28006.ds AS metric_time__day FROM ***************************.dim_users users_ds_source_src_28000 CROSS JOIN @@ -21,10 +21,9 @@ ON LEFT OUTER JOIN ***************************.mf_time_spine subq_12 ON - DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) = subq_12.ds + date_trunc('day', users_ds_source_src_28000.bio_added_ts) = subq_12.ds GROUP BY - subq_12.martian_day - , subq_11.martian_day - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) - , time_spine_src_28006.ds -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__bio_added_ts__martian_day + , metric_time__martian_day + , user__bio_added_ts__month + , metric_time__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql index 961d056b61..c59a175f79 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0.sql @@ -38,26 +38,23 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql index 6e0bad8837..9be0ba2e08 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_metric_time__plan0_optimized.sql @@ -13,5 +13,4 @@ LEFT OUTER JOIN ON time_spine_src_28006.ds = subq_4.ds GROUP BY - subq_4.martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql index 3b17dcd9b7..24c11b7e6d 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0.sql @@ -24,73 +24,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant AS is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -102,9 +102,7 @@ FROM ( LEFT OUTER JOIN ***************************.mf_time_spine subq_0 ON - DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_0.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('day', bookings_source_src_28000.ds) = subq_0.ds ) subq_1 GROUP BY - subq_1.booking__ds__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql index 298885f0eb..8e7286dacc 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metric_custom_granularity_non_metric_time__plan0_optimized.sql @@ -11,7 +11,6 @@ FROM ***************************.fct_bookings bookings_source_src_28000 LEFT OUTER JOIN ***************************.mf_time_spine subq_2 ON - DATE_TRUNC('day', bookings_source_src_28000.ds) = subq_2.ds + date_trunc('day', bookings_source_src_28000.ds) = subq_2.ds GROUP BY - subq_2.martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql index 5305f83ed2..7e5be0a6f2 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql @@ -74,53 +74,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -132,12 +132,9 @@ FROM ( LEFT OUTER JOIN ***************************.mf_time_spine subq_0 ON - DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_0.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('day', listings_latest_src_28000.created_at) = subq_0.ds ) subq_1 WHERE listing__ds__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.listing__ds__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__ds__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql index 6e47c9df8a..869c28dc7b 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql @@ -12,16 +12,14 @@ FROM ( -- Read Elements From Semantic Model 'listings_latest' -- Join to Custom Granularity Dataset SELECT - DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day + date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day , subq_3.martian_day AS listing__ds__martian_day FROM ***************************.dim_listings_latest listings_latest_src_28000 LEFT OUTER JOIN ***************************.mf_time_spine subq_3 ON - DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_3.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('day', listings_latest_src_28000.created_at) = subq_3.ds ) subq_4 WHERE listing__ds__martian_day = '2020-01-01' GROUP BY listing__ds__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql index 55cc7cf748..0e98e1a33b 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -74,53 +74,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -132,12 +132,9 @@ FROM ( LEFT OUTER JOIN ***************************.mf_time_spine subq_0 ON - DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_0.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('day', listings_latest_src_28000.created_at) = subq_0.ds ) subq_1 WHERE listing__ds__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.listing__ds__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql index 3832094b3c..abf8aeeb40 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -17,10 +17,8 @@ FROM ( LEFT OUTER JOIN ***************************.mf_time_spine subq_3 ON - DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_3.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('day', listings_latest_src_28000.created_at) = subq_3.ds ) subq_4 WHERE listing__ds__martian_day = '2020-01-01' GROUP BY listing__ds__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql index 082103dc37..96cd0343fd 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0.sql @@ -147,26 +147,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -285,73 +281,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -359,24 +355,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.booking__ds__day, CAST(-5 AS Integer)) = subq_1.booking__ds__day + DATEADD(day, -5, subq_4.booking__ds__day) = subq_1.booking__ds__day LEFT OUTER JOIN ***************************.mf_time_spine subq_5 ON subq_4.booking__ds__day = subq_5.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.booking__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql index 439f71e887..957c03342d 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity__plan0_optimized.sql @@ -16,24 +16,20 @@ FROM ( subq_15.martian_day AS booking__ds__martian_day , SUM(subq_11.bookings) AS bookings_5_days_ago FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS booking__ds__day + date_trunc('day', ds) AS booking__ds__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON - addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_11.booking__ds__day + DATEADD(day, -5, time_spine_src_28006.ds) = subq_11.booking__ds__day LEFT OUTER JOIN ***************************.mf_time_spine subq_15 ON time_spine_src_28006.ds = subq_15.ds GROUP BY - subq_15.martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index b424c735fb..06df4927bc 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -249,26 +249,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -387,73 +383,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -461,27 +457,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day LEFT OUTER JOIN ***************************.mf_time_spine subq_5 ON subq_4.metric_time__day = subq_5.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index 3194c89c8e..f09d3d33c0 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -22,27 +22,22 @@ FROM ( , subq_12.bookings AS bookings , subq_16.martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 ON - addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_12.metric_time__day + DATEADD(day, -5, time_spine_src_28006.ds) = subq_12.metric_time__day LEFT OUTER JOIN ***************************.mf_time_spine subq_16 ON time_spine_src_28006.ds = subq_16.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql index 9f18f45247..99a997f91c 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0.sql @@ -137,73 +137,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -211,18 +211,13 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.booking__ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.booking__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day ) subq_4 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql index 3864c18a61..7f638c989f 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity__plan0_optimized.sql @@ -14,14 +14,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS booking__ds__day + , date_trunc('day', ds) AS booking__ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 LEFT OUTER JOIN ***************************.mf_time_spine subq_6 ON subq_5.booking__ds__day = subq_6.ds GROUP BY - subq_6.martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql index a82020fa5a..8867f2e864 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0.sql @@ -239,73 +239,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -313,12 +313,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['ds__day', 'listing'] SELECT subq_3.ds__day @@ -399,53 +396,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -453,11 +450,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing @@ -465,12 +459,8 @@ FROM ( ***************************.mf_time_spine subq_5 ON subq_4.ds__day = subq_5.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.listing__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__ds__martian_day ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql index eb2742ca5f..86a19457c8 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_and_join__plan0_optimized.sql @@ -17,7 +17,6 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 @@ -26,7 +25,6 @@ ON LEFT OUTER JOIN ***************************.mf_time_spine subq_14 ON - DATE_TRUNC('day', listings_latest_src_28000.created_at) = subq_14.ds + date_trunc('day', listings_latest_src_28000.created_at) = subq_14.ds GROUP BY - subq_14.martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql index 1e861e2977..7b7931af2b 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql @@ -238,73 +238,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -312,19 +312,13 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql index e138f8e9ab..2aec3e9e98 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -20,15 +20,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE metric_time__martian_day = '2020-01-01' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql index b6f4fec67a..8777a65b8e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -241,73 +241,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -315,21 +315,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 LEFT OUTER JOIN ***************************.mf_time_spine subq_1 ON subq_0.ds__day = subq_1.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__martian_day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__martian_day ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql index 866b58962a..e50ea74a5a 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -21,17 +21,14 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' SELECT 1 AS bookings - , DATE_TRUNC('day', ds) AS ds__day + , date_trunc('day', ds) AS ds__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 LEFT OUTER JOIN ***************************.mf_time_spine subq_7 ON subq_6.ds__day = subq_7.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE metric_time__martian_day = '2020-01-01' GROUP BY metric_time__martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql index df082e8324..eaecc04994 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0.sql @@ -242,73 +242,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -316,12 +316,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['user__ds_partitioned__day', 'user__ds__day', 'listing'] SELECT subq_7.user__ds__day @@ -572,53 +569,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -626,12 +623,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'home_state', -- 'user__home_state', @@ -1208,195 +1202,190 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON subq_3.user = subq_6.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 ON ( @@ -1408,12 +1397,8 @@ FROM ( ***************************.mf_time_spine subq_9 ON subq_8.user__ds__day = subq_9.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.listing__user__ds__martian_day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user__ds__martian_day ) subq_12 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql index 70c494e2d7..17af719883 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_multi_hop_custom_granularity__plan0_optimized.sql @@ -16,26 +16,23 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + date_trunc('day', ds_partitioned) AS ds_partitioned__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['user__ds_partitioned__day', 'user__ds__day', 'listing'] SELECT - DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day , listings_latest_src_28000.listing_id AS listing FROM ***************************.dim_listings_latest listings_latest_src_28000 LEFT OUTER JOIN ***************************.dim_users users_ds_source_src_28000 ON listings_latest_src_28000.user_id = users_ds_source_src_28000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON ( @@ -48,5 +45,4 @@ LEFT OUTER JOIN ON subq_21.user__ds__day = subq_22.ds GROUP BY - subq_22.martian_day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user__ds__martian_day diff --git a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql index c3ec8b92a9..198ac40d1d 100644 --- a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql +++ b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_metric_tasks__query0.sql @@ -7,11 +7,9 @@ SELECT , SUM(count_dogs) AS count_dogs FROM ( SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS count_dogs FROM ***************************.fct_animals animals_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql index 27876c1e89..f6b2f5371f 100644 --- a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql +++ b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql @@ -15,21 +15,18 @@ FROM ( , subq_1.instant_bookings AS instant_bookings FROM ( SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_10000 ON subq_1.listing = listings_latest_src_10000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE listing__capacity_latest > 3 GROUP BY metric_time__day , listing__capacity_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql index df90ad0554..589b63b085 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0.sql @@ -38,73 +38,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -112,16 +112,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + is_instant ) subq_2 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_4.is_instant @@ -151,73 +147,73 @@ FULL OUTER JOIN , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -225,16 +221,12 @@ FULL OUTER JOIN , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + is_instant ) subq_5 ON subq_2.is_instant = subq_5.is_instant GROUP BY - COALESCE(subq_2.is_instant, subq_5.is_instant) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + is_instant diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql index 04151bb604..1b4ab7aab4 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_combine_output_node__plan0_optimized.sql @@ -13,7 +13,6 @@ WITH rss_28001_cte AS ( , guest_id AS bookers , is_instant FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -31,10 +30,8 @@ FROM ( FROM rss_28001_cte rss_28001_cte GROUP BY is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Read From CTE For node_id=rss_28001 -- Pass Only Elements: ['instant_bookings', 'bookers', 'is_instant'] -- Aggregate Measures @@ -45,10 +42,8 @@ FULL OUTER JOIN FROM rss_28001_cte rss_28001_cte GROUP BY is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_8.is_instant = subq_11.is_instant GROUP BY - COALESCE(subq_8.is_instant, subq_11.is_instant) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + is_instant diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql index 8ac4c6194e..f385b89736 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0.sql @@ -44,73 +44,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -118,12 +118,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_2.listing @@ -134,53 +131,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -188,17 +185,12 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.listing = subq_3.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - , subq_4.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql index c3ac5f49e8..8a6cd52883 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node__plan0_optimized.sql @@ -18,13 +18,11 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_7.listing = listings_latest_src_28000.listing_id GROUP BY - subq_7.listing - , listings_latest_src_28000.country -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql index caf033d932..10eaa6c309 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql @@ -255,73 +255,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -329,12 +329,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -415,53 +412,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -469,27 +466,19 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.ds__day - , subq_6.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_16.ds__day @@ -638,61 +627,58 @@ FROM ( -- Read Elements From Semantic Model 'views_source' SELECT 1 AS views - , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS ds__day + , date_trunc('week', views_source_src_28000.ds) AS ds__week + , date_trunc('month', views_source_src_28000.ds) AS ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS ds__year + , toYear(views_source_src_28000.ds) AS ds__extract_year + , toQuarter(views_source_src_28000.ds) AS ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS view__ds__day + , date_trunc('week', views_source_src_28000.ds) AS view__ds__week + , date_trunc('month', views_source_src_28000.ds) AS view__ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS view__ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS view__ds__year + , toYear(views_source_src_28000.ds) AS view__ds__extract_year + , toQuarter(views_source_src_28000.ds) AS view__ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS view__ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS view__ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS view__ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS view__ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy , views_source_src_28000.listing_id AS listing , views_source_src_28000.user_id AS user , views_source_src_28000.listing_id AS view__listing , views_source_src_28000.user_id AS view__user FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_12.listing @@ -773,53 +759,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -827,24 +813,17 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_10.listing = subq_13.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 GROUP BY - subq_15.ds__day - , subq_15.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 ON ( @@ -853,8 +832,6 @@ FROM ( subq_8.ds__day = subq_17.ds__day ) GROUP BY - COALESCE(subq_8.ds__day, subq_17.ds__day) - , COALESCE(subq_8.listing__country_latest, subq_17.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql index ef94e05959..61ce32e18d 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql @@ -12,7 +12,6 @@ WITH sma_28014_cte AS ( listing_id AS listing , country AS country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -39,23 +38,20 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS ds__day + date_trunc('day', ds) AS ds__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 LEFT OUTER JOIN sma_28014_cte sma_28014_cte ON subq_20.listing = sma_28014_cte.listing GROUP BY - subq_20.ds__day - , sma_28014_cte.country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_27 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['views', 'listing__country_latest', 'ds__day'] -- Aggregate Measures @@ -68,20 +64,18 @@ FROM ( -- Read Elements From Semantic Model 'views_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS ds__day + date_trunc('day', ds) AS ds__day , listing_id AS listing , 1 AS views FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 LEFT OUTER JOIN sma_28014_cte sma_28014_cte ON subq_29.listing = sma_28014_cte.listing GROUP BY - subq_29.ds__day - , sma_28014_cte.country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_35 ON ( @@ -90,8 +84,6 @@ FROM ( subq_27.ds__day = subq_35.ds__day ) GROUP BY - COALESCE(subq_27.ds__day, subq_35.ds__day) - , COALESCE(subq_27.listing__country_latest, subq_35.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , listing__country_latest ) subq_36 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql index 790db303f3..76c9b55845 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql @@ -47,73 +47,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -121,12 +121,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_2.listing @@ -137,53 +134,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -191,17 +188,12 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.listing = subq_3.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - , subq_4.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql index f78b45dcb6..6b6a3b23a0 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql @@ -25,15 +25,12 @@ FROM ( , 1 AS bookings , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_7.listing = listings_latest_src_28000.listing_id GROUP BY - subq_7.listing - , listings_latest_src_28000.country - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql index 0cf3a5b176..87b7e780b1 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0.sql @@ -44,73 +44,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -118,12 +118,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_2.listing @@ -134,53 +131,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -188,17 +185,12 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.listing = subq_3.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - , subq_4.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql index 3b8f562e59..1bcc4a7645 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_simple_expr__plan0_optimized.sql @@ -22,8 +22,6 @@ FROM ( ON bookings_source_src_28000.listing_id = listings_latest_src_28000.listing_id GROUP BY - bookings_source_src_28000.listing_id - , listings_latest_src_28000.country - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing + , listing__country_latest ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql index f472229759..2bac166276 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql @@ -38,73 +38,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -112,11 +112,7 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE subq_2.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql index 18cc99f5dd..5e6a875ffa 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql @@ -9,9 +9,8 @@ sql_engine: Clickhouse -- Metric Time Dimension 'ds' -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-02T00:00:00] SELECT - DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS ds__day + , date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 -WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 +WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql index a7a855632d..393bb1fa0d 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql @@ -133,53 +133,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -187,10 +187,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_1.user @@ -198,43 +196,38 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 ON subq_0.user = subq_2.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 WHERE listing__country_latest = 'us' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__home_state_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql index fd29d93ed4..d55f9084f9 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql @@ -18,9 +18,7 @@ FROM ( ***************************.dim_users_latest users_latest_src_28000 ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE listing__country_latest = 'us' GROUP BY user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql index 0edfb47f6f..a35171d950 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql @@ -74,53 +74,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -128,10 +128,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_1.user @@ -139,41 +137,37 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 ON subq_0.user = subq_2.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.listing__is_lux_latest - , subq_3.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql index fc47124a24..be86f0abd0 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql @@ -15,6 +15,5 @@ FULL OUTER JOIN ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id GROUP BY - listings_latest_src_28000.is_lux - , users_latest_src_28000.home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql index bdad4dbec4..d1132876f9 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0.sql @@ -25,73 +25,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -99,6 +99,4 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql index 55ceca4f09..a580380d7a 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_node__plan0_optimized.sql @@ -9,4 +9,3 @@ sql_engine: Clickhouse SELECT 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql index 215fbd439e..cd8a7e8b65 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql @@ -31,73 +31,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -105,9 +105,6 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__ds__day = '2020-01-01' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql index 45deb5c7ce..160533491a 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql @@ -12,10 +12,8 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Pass Only Elements: ['bookings', 'ds__day'] SELECT - DATE_TRUNC('day', ds) AS ds__day + date_trunc('day', ds) AS ds__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 WHERE booking__ds__day = '2020-01-01' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql index 8b4be059a6..dcc24ef460 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0.sql @@ -37,73 +37,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -111,8 +111,5 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql index b52a8511ae..fd240e0a99 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_measure_aggregation_node__plan0_optimized.sql @@ -15,4 +15,3 @@ SELECT , COUNT(DISTINCT guest_id) AS bookers , AVG(booking_value) AS average_booking_value FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql index 59284fdf61..c928b4c88a 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0.sql @@ -33,73 +33,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -107,12 +107,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_2.listing @@ -123,53 +120,53 @@ LEFT OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -177,14 +174,11 @@ LEFT OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.listing = subq_3.listing -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_4.listing @@ -195,53 +189,53 @@ LEFT OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -249,10 +243,7 @@ LEFT OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 ON subq_1.listing = subq_5.listing -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql index cc4f15d079..616319a74c 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_multi_join_node__plan0_optimized.sql @@ -12,7 +12,6 @@ WITH pfe_1_cte AS ( listing_id AS listing , country AS country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -27,28 +26,22 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Read From CTE For node_id=pfe_1 SELECT listing , country_latest FROM pfe_1_cte pfe_1_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_7.listing = subq_9.listing -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Read From CTE For node_id=pfe_1 SELECT listing , country_latest FROM pfe_1_cte pfe_1_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON subq_7.listing = subq_10.listing -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql index 12da6834e4..c01ca6be0c 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0.sql @@ -45,73 +45,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -119,16 +119,11 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.ds__day - , subq_1.is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day + , is_instant ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ORDER BY subq_3.ds__day, subq_3.bookings DESC -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql index bd1bf33e1b..324994f689 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_order_by_node__plan0_optimized.sql @@ -15,14 +15,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Pass Only Elements: ['bookings', 'is_instant', 'ds__day'] SELECT - DATE_TRUNC('day', ds) AS ds__day + date_trunc('day', ds) AS ds__day , is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY ds__day , is_instant ORDER BY ds__day, bookings DESC -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql index 361315185c..4f4da5fe3e 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0.sql @@ -55,49 +55,47 @@ FROM ( , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -INNER JOIN -( +INNER JOIN ( -- Filter row on MIN(ds__day) SELECT MIN(subq_1.ds__day) AS ds__day__complete @@ -108,49 +106,46 @@ INNER JOIN , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 ON subq_0.ds__day = subq_2.ds__day__complete -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql index 73f5e75ec5..cd1a7ae173 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node__plan0_optimized.sql @@ -55,56 +55,52 @@ FROM ( , account_balance AS total_account_balance_first_day , account_balance AS current_account_balance_by_user , account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('month', ds_month) AS ds_month__month - , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter - , DATE_TRUNC('year', ds_month) AS ds_month__year - , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('month', ds_month) AS ds_month__month + , date_trunc('quarter', ds_month) AS ds_month__quarter + , date_trunc('year', ds_month) AS ds_month__year + , toYear(ds_month) AS ds_month__extract_year + , toQuarter(ds_month) AS ds_month__extract_quarter + , toMonth(ds_month) AS ds_month__extract_month , account_type - , DATE_TRUNC('day', ds) AS account__ds__day - , DATE_TRUNC('week', ds) AS account__ds__week - , DATE_TRUNC('month', ds) AS account__ds__month - , DATE_TRUNC('quarter', ds) AS account__ds__quarter - , DATE_TRUNC('year', ds) AS account__ds__year - , EXTRACT(toYear FROM ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy - , DATE_TRUNC('month', ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , date_trunc('day', ds) AS account__ds__day + , date_trunc('week', ds) AS account__ds__week + , date_trunc('month', ds) AS account__ds__month + , date_trunc('quarter', ds) AS account__ds__quarter + , date_trunc('year', ds) AS account__ds__year + , toYear(ds) AS account__ds__extract_year + , toQuarter(ds) AS account__ds__extract_quarter + , toMonth(ds) AS account__ds__extract_month + , toDayOfMonth(ds) AS account__ds__extract_day + , toDayOfWeek(ds) AS account__ds__extract_dow + , toDayOfYear(ds) AS account__ds__extract_doy + , date_trunc('month', ds_month) AS account__ds_month__month + , date_trunc('quarter', ds_month) AS account__ds_month__quarter + , date_trunc('year', ds_month) AS account__ds_month__year + , toYear(ds_month) AS account__ds_month__extract_year + , toQuarter(ds_month) AS account__ds_month__extract_quarter + , toMonth(ds_month) AS account__ds_month__extract_month , account_type AS account__account_type , user_id AS user , user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 -INNER JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'accounts_source' -- Filter row on MIN(ds__day) SELECT - MIN(DATE_TRUNC('day', ds)) AS ds__day__complete + MIN(date_trunc('day', ds)) AS ds__day__complete FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 ON subq_3.ds__day = subq_5.ds__day__complete -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql index 911e656000..b5e966caf1 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0.sql @@ -55,49 +55,47 @@ FROM ( , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -INNER JOIN -( +INNER JOIN ( -- Filter row on MAX(ds__day) SELECT subq_1.user @@ -109,50 +107,48 @@ INNER JOIN , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_2 ON ( @@ -160,4 +156,3 @@ ON ) AND ( subq_0.user = subq_2.user ) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql index 240479f72c..c38348572c 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_grouping__plan0_optimized.sql @@ -55,58 +55,55 @@ FROM ( , account_balance AS total_account_balance_first_day , account_balance AS current_account_balance_by_user , account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('month', ds_month) AS ds_month__month - , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter - , DATE_TRUNC('year', ds_month) AS ds_month__year - , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('month', ds_month) AS ds_month__month + , date_trunc('quarter', ds_month) AS ds_month__quarter + , date_trunc('year', ds_month) AS ds_month__year + , toYear(ds_month) AS ds_month__extract_year + , toQuarter(ds_month) AS ds_month__extract_quarter + , toMonth(ds_month) AS ds_month__extract_month , account_type - , DATE_TRUNC('day', ds) AS account__ds__day - , DATE_TRUNC('week', ds) AS account__ds__week - , DATE_TRUNC('month', ds) AS account__ds__month - , DATE_TRUNC('quarter', ds) AS account__ds__quarter - , DATE_TRUNC('year', ds) AS account__ds__year - , EXTRACT(toYear FROM ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy - , DATE_TRUNC('month', ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , date_trunc('day', ds) AS account__ds__day + , date_trunc('week', ds) AS account__ds__week + , date_trunc('month', ds) AS account__ds__month + , date_trunc('quarter', ds) AS account__ds__quarter + , date_trunc('year', ds) AS account__ds__year + , toYear(ds) AS account__ds__extract_year + , toQuarter(ds) AS account__ds__extract_quarter + , toMonth(ds) AS account__ds__extract_month + , toDayOfMonth(ds) AS account__ds__extract_day + , toDayOfWeek(ds) AS account__ds__extract_dow + , toDayOfYear(ds) AS account__ds__extract_doy + , date_trunc('month', ds_month) AS account__ds_month__month + , date_trunc('quarter', ds_month) AS account__ds_month__quarter + , date_trunc('year', ds_month) AS account__ds_month__year + , toYear(ds_month) AS account__ds_month__extract_year + , toQuarter(ds_month) AS account__ds_month__extract_quarter + , toMonth(ds_month) AS account__ds_month__extract_month , account_type AS account__account_type , user_id AS user , user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 -INNER JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'accounts_source' -- Filter row on MAX(ds__day) SELECT user_id AS user - , MAX(DATE_TRUNC('day', ds)) AS ds__day__complete + , MAX(date_trunc('day', ds)) AS ds__day__complete FROM ***************************.fct_accounts accounts_source_src_28000 GROUP BY - user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_5 ON ( @@ -114,4 +111,3 @@ ON ) AND ( subq_3.user = subq_5.user ) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql index fb7fa91cf3..6d07fda078 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0.sql @@ -55,49 +55,47 @@ FROM ( , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -INNER JOIN -( +INNER JOIN ( -- Filter row on MIN(ds__day) SELECT subq_1.ds__week @@ -109,51 +107,48 @@ INNER JOIN , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.ds__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__week ) subq_2 ON subq_0.ds__day = subq_2.ds__day__complete -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql index b76a4728a7..dbd9e6c834 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql @@ -55,59 +55,55 @@ FROM ( , account_balance AS total_account_balance_first_day , account_balance AS current_account_balance_by_user , account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('month', ds_month) AS ds_month__month - , DATE_TRUNC('quarter', ds_month) AS ds_month__quarter - , DATE_TRUNC('year', ds_month) AS ds_month__year - , EXTRACT(toYear FROM ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS ds_month__extract_month + , date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('month', ds_month) AS ds_month__month + , date_trunc('quarter', ds_month) AS ds_month__quarter + , date_trunc('year', ds_month) AS ds_month__year + , toYear(ds_month) AS ds_month__extract_year + , toQuarter(ds_month) AS ds_month__extract_quarter + , toMonth(ds_month) AS ds_month__extract_month , account_type - , DATE_TRUNC('day', ds) AS account__ds__day - , DATE_TRUNC('week', ds) AS account__ds__week - , DATE_TRUNC('month', ds) AS account__ds__month - , DATE_TRUNC('quarter', ds) AS account__ds__quarter - , DATE_TRUNC('year', ds) AS account__ds__year - , EXTRACT(toYear FROM ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS account__ds__extract_doy - , DATE_TRUNC('month', ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM ds_month) AS account__ds_month__extract_month + , date_trunc('day', ds) AS account__ds__day + , date_trunc('week', ds) AS account__ds__week + , date_trunc('month', ds) AS account__ds__month + , date_trunc('quarter', ds) AS account__ds__quarter + , date_trunc('year', ds) AS account__ds__year + , toYear(ds) AS account__ds__extract_year + , toQuarter(ds) AS account__ds__extract_quarter + , toMonth(ds) AS account__ds__extract_month + , toDayOfMonth(ds) AS account__ds__extract_day + , toDayOfWeek(ds) AS account__ds__extract_dow + , toDayOfYear(ds) AS account__ds__extract_doy + , date_trunc('month', ds_month) AS account__ds_month__month + , date_trunc('quarter', ds_month) AS account__ds_month__quarter + , date_trunc('year', ds_month) AS account__ds_month__year + , toYear(ds_month) AS account__ds_month__extract_year + , toQuarter(ds_month) AS account__ds_month__extract_quarter + , toMonth(ds_month) AS account__ds_month__extract_month , account_type AS account__account_type , user_id AS user , user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 -INNER JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'accounts_source' -- Filter row on MIN(ds__day) SELECT - DATE_TRUNC('week', ds) AS ds__week - , MIN(DATE_TRUNC('day', ds)) AS ds__day__complete + date_trunc('week', ds) AS ds__week + , MIN(date_trunc('day', ds)) AS ds__day__complete FROM ***************************.fct_accounts accounts_source_src_28000 GROUP BY - DATE_TRUNC('week', ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__week ) subq_5 ON subq_3.ds__day = subq_5.ds__day__complete -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql index 891b460f8d..5a4ff24862 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0.sql @@ -31,73 +31,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -105,12 +105,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Pass Only Elements: ['listing__country_latest', 'listing'] SELECT subq_2.listing @@ -121,53 +118,53 @@ LEFT OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -175,10 +172,7 @@ LEFT OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.listing = subq_3.listing -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql index 52b68c388f..e2d9af5bee 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_single_join_node__plan0_optimized.sql @@ -15,10 +15,8 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_5.listing = listings_latest_src_28000.listing_id -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql index 05749175be..da60b94b48 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0.sql @@ -21,73 +21,73 @@ SELECT , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -95,4 +95,3 @@ SELECT , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql index ccc27f905d..dff73cd5fe 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_source_node__plan0_optimized.sql @@ -21,73 +21,73 @@ SELECT , booking_value AS approximate_continuous_booking_value_p99 , booking_value AS approximate_discrete_booking_value_p99 , is_instant - , DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS paid_at__day - , DATE_TRUNC('week', paid_at) AS paid_at__week - , DATE_TRUNC('month', paid_at) AS paid_at__month - , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter - , DATE_TRUNC('year', paid_at) AS paid_at__year - , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy + , date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('day', ds_partitioned) AS ds_partitioned__day + , date_trunc('week', ds_partitioned) AS ds_partitioned__week + , date_trunc('month', ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS ds_partitioned__year + , toYear(ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS paid_at__day + , date_trunc('week', paid_at) AS paid_at__week + , date_trunc('month', paid_at) AS paid_at__month + , date_trunc('quarter', paid_at) AS paid_at__quarter + , date_trunc('year', paid_at) AS paid_at__year + , toYear(paid_at) AS paid_at__extract_year + , toQuarter(paid_at) AS paid_at__extract_quarter + , toMonth(paid_at) AS paid_at__extract_month + , toDayOfMonth(paid_at) AS paid_at__extract_day + , toDayOfWeek(paid_at) AS paid_at__extract_dow + , toDayOfYear(paid_at) AS paid_at__extract_doy , is_instant AS booking__is_instant - , DATE_TRUNC('day', ds) AS booking__ds__day - , DATE_TRUNC('week', ds) AS booking__ds__week - , DATE_TRUNC('month', ds) AS booking__ds__month - , DATE_TRUNC('quarter', ds) AS booking__ds__quarter - , DATE_TRUNC('year', ds) AS booking__ds__year - , EXTRACT(toYear FROM ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', ds) AS booking__ds__day + , date_trunc('week', ds) AS booking__ds__week + , date_trunc('month', ds) AS booking__ds__month + , date_trunc('quarter', ds) AS booking__ds__quarter + , date_trunc('year', ds) AS booking__ds__year + , toYear(ds) AS booking__ds__extract_year + , toQuarter(ds) AS booking__ds__extract_quarter + , toMonth(ds) AS booking__ds__extract_month + , toDayOfMonth(ds) AS booking__ds__extract_day + , toDayOfWeek(ds) AS booking__ds__extract_dow + , toDayOfYear(ds) AS booking__ds__extract_doy + , date_trunc('day', ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS booking__ds_partitioned__year + , toYear(ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS booking__paid_at__day + , date_trunc('week', paid_at) AS booking__paid_at__week + , date_trunc('month', paid_at) AS booking__paid_at__month + , date_trunc('quarter', paid_at) AS booking__paid_at__quarter + , date_trunc('year', paid_at) AS booking__paid_at__year + , toYear(paid_at) AS booking__paid_at__extract_year + , toQuarter(paid_at) AS booking__paid_at__extract_quarter + , toMonth(paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(paid_at) AS booking__paid_at__extract_doy , listing_id AS listing , guest_id AS guest , host_id AS host @@ -95,4 +95,3 @@ SELECT , guest_id AS booking__guest , host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql index 8b43ff776b..b7ecf1d990 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql @@ -246,26 +246,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - INNER JOIN - ( + INNER JOIN ( -- Join Self Over Time Range SELECT subq_2.metric_time__day AS metric_time__day @@ -371,10 +367,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -493,73 +487,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -567,25 +561,22 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 ON - addDays(subq_7.metric_time__day, CAST(-2 AS Integer)) = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_7.metric_time__day) = subq_4.metric_time__day ) subq_8 WHERE subq_8.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql index 0f562929b3..bc01e8a0c2 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -16,22 +16,24 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , COUNT(DISTINCT subq_17.bookers) AS every_2_days_bookers_2_days_ago FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Join Self Over Time Range SELECT subq_16.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_16 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) + ) ) subq_17 ON - addDays(time_spine_src_28006.ds, CAST(-2 AS Integer)) = subq_17.metric_time__day + DATEADD(day, -2, time_spine_src_28006.ds) = subq_17.metric_time__day WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_25 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql index 38b539c5c8..52ea28f47b 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -367,73 +361,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -441,22 +435,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_4.metric_time__day = subq_9.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql index 34619561ec..f07993d4fe 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric__plan0_optimized.sql @@ -18,14 +18,11 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['referred_bookings', 'bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql index 0574b512ab..405a6dc070 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0.sql @@ -154,73 +154,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -228,22 +228,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__is_instant ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.booking__is_instant @@ -382,73 +375,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -456,25 +449,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__is_instant ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_5.booking__is_instant = subq_11.booking__is_instant GROUP BY - COALESCE(subq_5.booking__is_instant, subq_11.booking__is_instant) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__is_instant ) subq_12 LIMIT 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql index 639e81e4fc..6e934a9f2e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_that_defines_the_same_alias_in_different_components__plan0_optimized.sql @@ -14,7 +14,6 @@ WITH sma_28009_cte AS ( , 1 AS bookings , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -37,12 +36,9 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT booking__is_instant @@ -58,13 +54,10 @@ FULL OUTER JOIN FROM sma_28009_cte sma_28009_cte GROUP BY booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 ON subq_18.booking__is_instant = subq_23.booking__is_instant GROUP BY - COALESCE(subq_18.booking__is_instant, subq_23.booking__is_instant) + booking__is_instant LIMIT 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql index 9f259c6595..06923e325d 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql @@ -52,9 +52,9 @@ FROM ( FROM ( -- Change Column Aliases SELECT - subq_2.ds__month AS metric_time__month - , subq_2.ds__day + subq_2.ds__day , subq_2.ds__week + , subq_2.ds__month AS metric_time__month , subq_2.ds__quarter , subq_2.ds__year , subq_2.ds__extract_year @@ -68,28 +68,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_16006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_16006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_16006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_16006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_16006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_16006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_16006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_16006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_16006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_16006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_16006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_16006.ds) AS ds__week + , date_trunc('month', time_spine_src_16006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_16006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_16006.ds) AS ds__year + , toYear(time_spine_src_16006.ds) AS ds__extract_year + , toQuarter(time_spine_src_16006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_16006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_16006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_16006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_16006.ds) AS ds__extract_doy , time_spine_src_16006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_16006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__month @@ -117,35 +113,28 @@ FROM ( -- Read Elements From Semantic Model 'monthly_bookings_source' SELECT monthly_bookings_source_src_16000.bookings_monthly - , DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) AS ds__month - , DATE_TRUNC('quarter', monthly_bookings_source_src_16000.ds) AS ds__quarter - , DATE_TRUNC('year', monthly_bookings_source_src_16000.ds) AS ds__year - , EXTRACT(toYear FROM monthly_bookings_source_src_16000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM monthly_bookings_source_src_16000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM monthly_bookings_source_src_16000.ds) AS ds__extract_month - , DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__month - , DATE_TRUNC('quarter', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__quarter - , DATE_TRUNC('year', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__year - , EXTRACT(toYear FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_year - , EXTRACT(toQuarter FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_quarter - , EXTRACT(toMonth FROM monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_month + , date_trunc('month', monthly_bookings_source_src_16000.ds) AS ds__month + , date_trunc('quarter', monthly_bookings_source_src_16000.ds) AS ds__quarter + , date_trunc('year', monthly_bookings_source_src_16000.ds) AS ds__year + , toYear(monthly_bookings_source_src_16000.ds) AS ds__extract_year + , toQuarter(monthly_bookings_source_src_16000.ds) AS ds__extract_quarter + , toMonth(monthly_bookings_source_src_16000.ds) AS ds__extract_month + , date_trunc('month', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__month + , date_trunc('quarter', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__quarter + , date_trunc('year', monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__year + , toYear(monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_year + , toQuarter(monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_quarter + , toMonth(monthly_bookings_source_src_16000.ds) AS booking_monthly__ds__extract_month , monthly_bookings_source_src_16000.listing_id AS listing , monthly_bookings_source_src_16000.listing_id AS booking_monthly__listing FROM ***************************.fct_bookings_extended_monthly monthly_bookings_source_src_16000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addMonths(subq_4.metric_time__month, CAST(-1 AS Integer)) = subq_1.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(month, -1, subq_4.metric_time__month) = subq_1.metric_time__month ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql index 4b8f9f6d4c..52499567e1 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql @@ -19,18 +19,15 @@ FROM ( -- Change Column Aliases -- Pass Only Elements: ['metric_time__month',] SELECT - DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('month', ds) AS metric_time__month FROM ***************************.mf_time_spine time_spine_src_16006 GROUP BY - DATE_TRUNC('month', ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_13 INNER JOIN ***************************.fct_bookings_extended_monthly monthly_bookings_source_src_16000 ON - addMonths(subq_13.metric_time__month, CAST(-1 AS Integer)) = DATE_TRUNC('month', monthly_bookings_source_src_16000.ds) + DATEADD(month, -1, subq_13.metric_time__month) = date_trunc('month', monthly_bookings_source_src_16000.ds) GROUP BY - subq_13.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql index 1a638e5ade..5a341dd639 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__day @@ -372,26 +366,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -510,73 +500,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -584,26 +574,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - DATE_TRUNC('month', subq_9.metric_time__day) = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', subq_9.metric_time__day) = subq_6.metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.metric_time__day = subq_13.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql index 6b81879452..10301c7b4f 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -33,10 +32,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -48,15 +45,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day + date_trunc('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_27 ON subq_19.metric_time__day = subq_27.metric_time__day GROUP BY - COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql index 58e2f6f354..fa7a7833a2 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__week @@ -373,26 +367,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -511,73 +501,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -585,27 +575,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - DATE_TRUNC('month', subq_9.metric_time__day) = subq_6.metric_time__day + date_trunc('month', subq_9.metric_time__day) = subq_6.metric_time__day WHERE subq_9.metric_time__week = subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.metric_time__week = subq_13.metric_time__week GROUP BY - COALESCE(subq_4.metric_time__week, subq_13.metric_time__week) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql index 64e1aa2131..20ab076933 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('week', ds) AS metric_time__week + date_trunc('day', ds) AS metric_time__day + , date_trunc('week', ds) AS metric_time__week , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,31 +33,26 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__week'] -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('week', time_spine_src_28006.ds) AS metric_time__week + date_trunc('week', time_spine_src_28006.ds) AS metric_time__week , SUM(sma_28009_cte.bookings) AS bookings_at_start_of_month FROM ***************************.mf_time_spine time_spine_src_28006 INNER JOIN sma_28009_cte sma_28009_cte ON - DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day - WHERE DATE_TRUNC('week', time_spine_src_28006.ds) = time_spine_src_28006.ds + date_trunc('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day + WHERE date_trunc('week', time_spine_src_28006.ds) = time_spine_src_28006.ds GROUP BY - DATE_TRUNC('week', time_spine_src_28006.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_27 ON subq_19.metric_time__week = subq_27.metric_time__week GROUP BY - COALESCE(subq_19.metric_time__week, subq_27.metric_time__week) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql index 1e6b82e27e..a0c66e47e7 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__day @@ -372,26 +366,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -510,73 +500,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -584,26 +574,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_9.metric_time__day) = subq_6.metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.metric_time__day = subq_13.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_13.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql index 5cf5df3495..53ce699261 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -33,10 +32,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -48,15 +45,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_27 ON subq_19.metric_time__day = subq_27.metric_time__day GROUP BY - COALESCE(subq_19.metric_time__day, subq_27.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql index 3f84243c6c..98f07c38af 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__quarter - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__quarter @@ -358,9 +352,9 @@ FROM ( -- Change Column Aliases SELECT subq_7.ds__day AS metric_time__day - , subq_7.ds__quarter AS metric_time__quarter , subq_7.ds__week , subq_7.ds__month + , subq_7.ds__quarter AS metric_time__quarter , subq_7.ds__year , subq_7.ds__extract_year , subq_7.ds__extract_quarter @@ -373,26 +367,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -511,73 +501,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -585,26 +575,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_9.metric_time__day) = subq_6.metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__quarter - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.metric_time__quarter = subq_13.metric_time__quarter GROUP BY - COALESCE(subq_4.metric_time__quarter, subq_13.metric_time__quarter) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql index fd3ec8cb32..d7ffe47d3e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('quarter', ds) AS metric_time__quarter + date_trunc('day', ds) AS metric_time__day + , date_trunc('quarter', ds) AS metric_time__quarter , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,30 +33,25 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__quarter - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__quarter'] -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('quarter', time_spine_src_28006.ds) AS metric_time__quarter + date_trunc('quarter', time_spine_src_28006.ds) AS metric_time__quarter , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago FROM ***************************.mf_time_spine time_spine_src_28006 INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day GROUP BY - DATE_TRUNC('quarter', time_spine_src_28006.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter ) subq_27 ON subq_19.metric_time__quarter = subq_27.metric_time__quarter GROUP BY - COALESCE(subq_19.metric_time__quarter, subq_27.metric_time__quarter) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql index d526da3ced..eaf3ad29bc 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql @@ -151,26 +151,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -289,73 +285,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -363,24 +359,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_16.metric_time__day @@ -519,26 +508,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_9.ds__day @@ -657,73 +642,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -731,26 +716,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - addMonths(subq_13.metric_time__day, CAST(-1 AS Integer)) = subq_10.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(month, -1, subq_13.metric_time__day) = subq_10.metric_time__day ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 GROUP BY - subq_15.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 ON subq_8.metric_time__day = subq_17.metric_time__day GROUP BY - COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql index 11f01511d7..0c1ddabf98 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28018_cte AS ( @@ -18,7 +17,6 @@ WITH sma_28009_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -42,13 +40,11 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - DATE_TRUNC('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day + date_trunc('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_27 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -60,15 +56,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addMonths(rss_28018_cte.ds__day, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(month, -1, rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_35 ON subq_27.metric_time__day = subq_35.metric_time__day GROUP BY - COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_36 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql index 19794c42be..1d1a5a754c 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql @@ -137,10 +137,10 @@ FROM ( -- Change Column Aliases SELECT subq_2.ds__day AS metric_time__day - , subq_2.ds__year AS metric_time__year , subq_2.ds__week , subq_2.ds__month , subq_2.ds__quarter + , subq_2.ds__year AS metric_time__year , subq_2.ds__extract_year , subq_2.ds__extract_quarter , subq_2.ds__extract_month @@ -152,26 +152,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -290,73 +286,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -364,25 +360,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day WHERE subq_4.metric_time__year = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_16.metric_time__year @@ -507,10 +496,10 @@ FROM ( -- Change Column Aliases SELECT subq_11.ds__day AS metric_time__day - , subq_11.ds__year AS metric_time__year , subq_11.ds__week , subq_11.ds__month , subq_11.ds__quarter + , subq_11.ds__year AS metric_time__year , subq_11.ds__extract_year , subq_11.ds__extract_quarter , subq_11.ds__extract_month @@ -522,26 +511,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_9.ds__day @@ -660,73 +645,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -734,26 +719,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - addMonths(subq_13.metric_time__day, CAST(-1 AS Integer)) = subq_10.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(month, -1, subq_13.metric_time__day) = subq_10.metric_time__day ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 GROUP BY - subq_15.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 ON subq_8.metric_time__year = subq_17.metric_time__year GROUP BY - COALESCE(subq_8.metric_time__year, subq_17.metric_time__year) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql index 18817d57ef..c277c47f4a 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql @@ -7,19 +7,17 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28018_cte AS ( -- Read From Time Spine 'mf_time_spine' SELECT ds AS ds__day - , DATE_TRUNC('year', ds) AS ds__year + , date_trunc('year', ds) AS ds__year FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -43,14 +41,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - DATE_TRUNC('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day + date_trunc('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day WHERE rss_28018_cte.ds__year = rss_28018_cte.ds__day GROUP BY - rss_28018_cte.ds__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_27 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__year'] -- Aggregate Measures @@ -62,15 +58,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addMonths(rss_28018_cte.ds__day, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(month, -1, rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day GROUP BY - rss_28018_cte.ds__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_35 ON subq_27.metric_time__year = subq_35.metric_time__year GROUP BY - COALESCE(subq_27.metric_time__year, subq_35.metric_time__year) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__year ) subq_36 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql index e93360ce5f..7e4e869aef 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql @@ -247,73 +247,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -321,23 +321,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_14.metric_time__day @@ -577,26 +570,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_6.ds__day @@ -715,73 +704,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -789,29 +778,20 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON - addDays(subq_10.metric_time__day, CAST(-14 AS Integer)) = subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_10.metric_time__day) = subq_7.metric_time__day ) subq_11 WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 GROUP BY - subq_13.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_5.metric_time__day = subq_15.metric_time__day GROUP BY - COALESCE(subq_5.metric_time__day, subq_15.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql index c55ecc4233..aaeaf80f27 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -36,15 +35,12 @@ FROM ( metric_time__day , bookings FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -61,18 +57,14 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day ) subq_27 WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_22.metric_time__day = subq_31.metric_time__day GROUP BY - COALESCE(subq_22.metric_time__day, subq_31.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql index 6aee6cf437..f4931cc9fa 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql @@ -145,26 +145,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - INNER JOIN - ( + INNER JOIN ( -- Join Self Over Time Range SELECT subq_2.metric_time__day AS metric_time__day @@ -270,10 +266,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -392,73 +386,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -466,22 +460,20 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 ON - addDays(subq_7.metric_time__day, CAST(-2 AS Integer)) = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_7.metric_time__day) = subq_4.metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql index 52734f25f2..ca8de8fc59 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql @@ -15,21 +15,23 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , COUNT(DISTINCT subq_16.bookers) AS every_2_days_bookers_2_days_ago FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Join Self Over Time Range SELECT subq_15.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_15 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) + ) ) subq_16 ON - addDays(time_spine_src_28006.ds, CAST(-2 AS Integer)) = subq_16.metric_time__day + DATEADD(day, -2, time_spine_src_28006.ds) = subq_16.metric_time__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_23 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql index 8cdea596fc..8e636547ff 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0.sql @@ -151,26 +151,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -289,73 +285,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -363,24 +359,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addWeeks(subq_4.booking__ds__day, CAST(-1 AS Integer)) = subq_1.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(week, -1, subq_4.booking__ds__day) = subq_1.booking__ds__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.booking__ds__day @@ -514,73 +503,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -588,22 +577,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_8.booking__ds__day = subq_13.booking__ds__day GROUP BY - COALESCE(subq_8.booking__ds__day, subq_13.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql index b088a09817..532bb5dad9 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS booking__ds__day + date_trunc('day', ds) AS booking__ds__day , booking_value , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -35,13 +34,11 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.booking__ds__day + DATEADD(week, -1, time_spine_src_28006.ds) = sma_28009_cte.booking__ds__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_23 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookers', 'booking__ds__day'] -- Aggregate Measures @@ -52,12 +49,9 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 ON subq_23.booking__ds__day = subq_27.booking__ds__day GROUP BY - COALESCE(subq_23.booking__ds__day, subq_27.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql index 5d5ca877dc..19d60cae7e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0.sql @@ -145,26 +145,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -283,73 +279,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -357,20 +353,13 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql index 0d140ce822..741106cef7 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql @@ -15,20 +15,16 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , SUM(subq_10.bookings) AS bookings_5_days_ago FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_10.metric_time__day + DATEADD(day, -5, time_spine_src_28006.ds) = subq_10.metric_time__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql index 7783cc1fdd..bd177ab40f 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,22 +220,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_9.metric_time__day @@ -326,53 +319,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -380,20 +373,14 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON subq_5.metric_time__day = subq_10.metric_time__day GROUP BY - COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql index ea1fc2344a..2eb8386561 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_multi_metric_fill_null__plan0_optimized.sql @@ -27,21 +27,16 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -52,17 +47,14 @@ FULL OUTER JOIN -- Metric Time Dimension 'ds' -- Pass Only Elements: ['listings', 'metric_time__day'] SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON subq_16.metric_time__day = subq_21.metric_time__day GROUP BY - COALESCE(subq_16.metric_time__day, subq_21.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql index 0481bceee4..5bbd3c4ba0 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0.sql @@ -158,73 +158,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -232,20 +232,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -379,73 +373,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -453,28 +447,20 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_4.metric_time__day = subq_9.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_15.metric_time__day @@ -608,73 +594,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -682,22 +668,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 ON subq_11.metric_time__day = subq_16.metric_time__day - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_20.metric_time__day @@ -831,73 +811,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -905,22 +885,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 GROUP BY - subq_19.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON COALESCE(subq_11.metric_time__day, subq_16.metric_time__day) = subq_21.metric_time__day GROUP BY - COALESCE(subq_11.metric_time__day, subq_16.metric_time__day, subq_21.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql index 24725302e0..50234239ad 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric__plan0_optimized.sql @@ -30,20 +30,16 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['referred_bookings', 'bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings , CASE WHEN referrer_id IS NOT NULL THEN 1 ELSE 0 END AS referred_bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -55,20 +51,16 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['instant_bookings', 'bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_33 ON subq_28.metric_time__day = subq_33.metric_time__day GROUP BY - COALESCE(subq_28.metric_time__day, subq_33.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_34 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql index 807aef43e4..a4977d3987 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql @@ -46,26 +46,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -213,26 +209,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -351,73 +343,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -425,32 +417,21 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - , subq_6.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , booking__is_instant ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON - addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql index 259fcd488f..d8a340842b 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql @@ -8,7 +8,6 @@ WITH rss_28018_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -27,8 +26,7 @@ FROM ( , subq_25.booking__is_instant AS booking__is_instant , subq_25.bookings_offset_once AS bookings_offset_once FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -44,31 +42,24 @@ FROM ( , subq_17.booking__is_instant AS booking__is_instant , SUM(subq_17.bookings) AS bookings FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 ON - addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_17.metric_time__day + DATEADD(day, -5, rss_28018_cte.ds__day) = subq_17.metric_time__day GROUP BY - rss_28018_cte.ds__day - , subq_17.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , booking__is_instant ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 ON - addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_25.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, rss_28018_cte.ds__day) = subq_25.metric_time__day ) subq_29 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql index 40ec631c90..106cffa632 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql @@ -40,26 +40,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT subq_4.metric_time__day @@ -198,73 +194,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -272,26 +268,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 ON - DATE_TRUNC('month', subq_8.metric_time__day) = subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', subq_8.metric_time__day) = subq_5.metric_time__day ) subq_9 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_14.metric_time__day @@ -430,73 +418,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -504,24 +492,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_9.metric_time__day = subq_15.metric_time__day GROUP BY - COALESCE(subq_9.metric_time__day, subq_15.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql index 0369468e28..e36a24a4ab 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -28,8 +27,7 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , subq_22.booking_fees_start_of_month AS booking_fees_start_of_month FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -45,16 +43,12 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 ON - DATE_TRUNC('month', time_spine_src_28006.ds) = subq_22.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', time_spine_src_28006.ds) = subq_22.metric_time__day ) subq_26 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -70,14 +64,10 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_26.metric_time__day = subq_31.metric_time__day GROUP BY - COALESCE(subq_26.metric_time__day, subq_31.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql index ca5166a493..7cf26ea2c3 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0.sql @@ -145,73 +145,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -219,18 +219,11 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql index 6ec631a763..5c00604922 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql @@ -26,17 +26,12 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql index f675de8600..8360eaca59 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql @@ -151,73 +151,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -225,24 +225,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.metric_time__day @@ -333,53 +325,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -387,20 +379,14 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_6.metric_time__day = subq_11.metric_time__day GROUP BY - COALESCE(subq_6.metric_time__day, subq_11.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql index 4e3f3ead9c..a6014fc281 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql @@ -32,23 +32,17 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -59,17 +53,14 @@ FULL OUTER JOIN -- Metric Time Dimension 'ds' -- Pass Only Elements: ['listings', 'metric_time__day'] SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 ON subq_18.metric_time__day = subq_23.metric_time__day GROUP BY - COALESCE(subq_18.metric_time__day, subq_23.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql index df7a7b0456..d669b93d28 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql @@ -352,73 +352,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -426,12 +426,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['is_lux_latest', 'listing'] SELECT subq_3.listing @@ -512,53 +509,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -566,27 +563,18 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE (listing__is_lux_latest) AND (booking__is_instant) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - CROSS JOIN - ( + CROSS JOIN ( -- Compute Metrics via Expressions SELECT subq_18.bookings @@ -921,73 +909,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -995,12 +983,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['is_lux_latest', 'listing'] SELECT subq_13.listing @@ -1081,53 +1066,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -1135,27 +1120,18 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_11.listing = subq_14.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 WHERE (listing__is_lux_latest) AND (booking__is_instant) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - CROSS JOIN - ( + CROSS JOIN ( -- Compute Metrics via Expressions SELECT subq_24.booking_value @@ -1387,73 +1363,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -1461,21 +1437,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql index 997001190f..2344ff593d 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql @@ -41,19 +41,15 @@ FROM ( , 1 AS bookings , booking_value AS average_booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_29.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_33 WHERE (listing__is_lux_latest) AND (booking__is_instant) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_37 - CROSS JOIN - ( + CROSS JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['booking_value',] -- Aggregate Measures @@ -67,13 +63,8 @@ FROM ( is_instant AS booking__is_instant , booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_39 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_43 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_44 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_45 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql index a4385e1c40..57501f920c 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -197,26 +193,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -335,73 +327,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -409,26 +401,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON - addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql index 4ed0d4a0b4..7858d274e0 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets__plan0_optimized.sql @@ -8,7 +8,6 @@ WITH rss_28018_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -20,8 +19,7 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , subq_23.bookings_offset_once AS bookings_offset_once FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -35,26 +33,20 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , SUM(subq_15.bookings) AS bookings FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON - addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_15.metric_time__day + DATEADD(day, -5, rss_28018_cte.ds__day) = subq_15.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_22 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 ON - addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_23.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, rss_28018_cte.ds__day) = subq_23.metric_time__day ) subq_27 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql index 7b1ea09ebc..830b0b573e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql @@ -39,26 +39,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -202,26 +198,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -340,73 +332,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -414,29 +406,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON - addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 WHERE subq_13.metric_time__day BETWEEN '2020-01-12' AND '2020-01-13' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql index 457a60d9e8..4f46d5d54e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql @@ -8,7 +8,6 @@ WITH rss_28018_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -21,8 +20,7 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , subq_24.bookings_offset_once AS bookings_offset_once FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -36,27 +34,21 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , SUM(subq_16.bookings) AS bookings FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 ON - addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_16.metric_time__day + DATEADD(day, -5, rss_28018_cte.ds__day) = subq_16.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 ON - addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_24.metric_time__day + DATEADD(day, -2, rss_28018_cte.ds__day) = subq_24.metric_time__day WHERE rss_28018_cte.ds__day BETWEEN '2020-01-12' AND '2020-01-13' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql index e74754475a..b011e281f9 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql @@ -39,26 +39,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -202,26 +198,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -340,73 +332,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -414,29 +406,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON - addDays(subq_12.metric_time__day, CAST(-2 AS Integer)) = subq_9.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql index 8804985dbe..bcc78a003a 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql @@ -8,7 +8,6 @@ WITH rss_28018_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -25,8 +24,7 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , subq_24.bookings_offset_once AS bookings_offset_once FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -40,29 +38,22 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , SUM(subq_16.bookings) AS bookings FROM rss_28018_cte rss_28018_cte - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 ON - addDays(rss_28018_cte.ds__day, CAST(-5 AS Integer)) = subq_16.metric_time__day + DATEADD(day, -5, rss_28018_cte.ds__day) = subq_16.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 ON - addDays(rss_28018_cte.ds__day, CAST(-2 AS Integer)) = subq_24.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -2, rss_28018_cte.ds__day) = subq_24.metric_time__day ) subq_28 WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql index 06a7ae8027..0f2b391360 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql @@ -234,8 +234,8 @@ FROM ( -- Change Column Aliases SELECT subq_2.ds__day AS metric_time__day - , subq_2.ds__month AS metric_time__month , subq_2.ds__week + , subq_2.ds__month AS metric_time__month , subq_2.ds__quarter , subq_2.ds__year , subq_2.ds__extract_year @@ -249,26 +249,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -387,73 +383,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -461,24 +457,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day + date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day WHERE subq_4.metric_time__month = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql index 350fa6f16f..1d37fcfbdc 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -20,27 +20,22 @@ FROM ( -- Join to Time Spine Dataset SELECT time_spine_src_28006.ds AS metric_time__day - , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , date_trunc('month', time_spine_src_28006.ds) AS metric_time__month , subq_11.bookings AS bookings FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON - DATE_TRUNC('month', time_spine_src_28006.ds) = subq_11.metric_time__day - WHERE DATE_TRUNC('month', time_spine_src_28006.ds) = time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', time_spine_src_28006.ds) = subq_11.metric_time__day + WHERE date_trunc('month', time_spine_src_28006.ds) = time_spine_src_28006.ds ) subq_15 WHERE metric_time__day = '2020-01-01' GROUP BY metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql index 1abc819838..3ae63681de 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0.sql @@ -142,10 +142,10 @@ FROM ( -- Change Column Aliases SELECT subq_2.ds__day AS metric_time__day - , subq_2.ds__month AS metric_time__month - , subq_2.ds__year AS metric_time__year , subq_2.ds__week + , subq_2.ds__month AS metric_time__month , subq_2.ds__quarter + , subq_2.ds__year AS metric_time__year , subq_2.ds__extract_year , subq_2.ds__extract_quarter , subq_2.ds__extract_month @@ -157,26 +157,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -295,73 +291,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -369,22 +365,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - DATE_TRUNC('month', subq_4.metric_time__day) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - , subq_6.metric_time__month - , subq_6.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql index 1b23c7a5cc..67d3ae6990 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql @@ -17,26 +17,22 @@ FROM ( -- Compute Metrics via Expressions SELECT time_spine_src_28006.ds AS metric_time__day - , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month - , DATE_TRUNC('year', time_spine_src_28006.ds) AS metric_time__year + , date_trunc('month', time_spine_src_28006.ds) AS metric_time__month + , date_trunc('year', time_spine_src_28006.ds) AS metric_time__year , SUM(subq_10.bookings) AS bookings_start_of_month FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - DATE_TRUNC('month', time_spine_src_28006.ds) = subq_10.metric_time__day + date_trunc('month', time_spine_src_28006.ds) = subq_10.metric_time__day GROUP BY - time_spine_src_28006.ds - , DATE_TRUNC('month', time_spine_src_28006.ds) - , DATE_TRUNC('year', time_spine_src_28006.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql index 9ac5589aaf..ace1d303f6 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.booking__ds__day @@ -372,26 +366,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -510,73 +500,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -584,26 +574,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - DATE_TRUNC('month', subq_9.booking__ds__day) = subq_6.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('month', subq_9.booking__ds__day) = subq_6.booking__ds__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.booking__ds__day = subq_13.booking__ds__day GROUP BY - COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql index 47913c47f3..e7a41b4673 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS booking__ds__day + date_trunc('day', ds) AS booking__ds__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -33,10 +32,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'booking__ds__day'] -- Aggregate Measures @@ -48,15 +45,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - DATE_TRUNC('month', time_spine_src_28006.ds) = sma_28009_cte.booking__ds__day + date_trunc('month', time_spine_src_28006.ds) = sma_28009_cte.booking__ds__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_27 ON subq_19.booking__ds__day = subq_27.booking__ds__day GROUP BY - COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql index a7f75be920..2f478a0745 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql @@ -240,8 +240,8 @@ FROM ( -- Change Column Aliases SELECT subq_2.ds__day AS metric_time__day - , subq_2.ds__month AS metric_time__month , subq_2.ds__week + , subq_2.ds__month AS metric_time__month , subq_2.ds__quarter , subq_2.ds__year , subq_2.ds__extract_year @@ -255,26 +255,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -393,73 +389,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -467,27 +463,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addWeeks(subq_4.metric_time__day, CAST(-1 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(week, -1, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_14.metric_time__month @@ -722,73 +710,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -796,25 +784,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE metric_time__day = '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 GROUP BY - subq_13.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_9.metric_time__month = subq_15.metric_time__month GROUP BY - COALESCE(subq_9.metric_time__month, subq_15.metric_time__month) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_16 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql index ee52104133..c8e79dc055 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -9,12 +9,11 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('day', ds) AS metric_time__day + , date_trunc('month', ds) AS metric_time__month , booking_value , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -38,22 +37,19 @@ FROM ( -- Join to Time Spine Dataset SELECT time_spine_src_28006.ds AS metric_time__day - , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month + , date_trunc('month', time_spine_src_28006.ds) AS metric_time__month , sma_28009_cte.booking_value AS booking_value FROM ***************************.mf_time_spine time_spine_src_28006 INNER JOIN sma_28009_cte sma_28009_cte ON - addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(week, -1, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day ) subq_22 WHERE metric_time__day = '2020-01-01' GROUP BY metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookers', 'metric_time__month'] -- Aggregate Measures @@ -69,17 +65,13 @@ FROM ( , booking_value , bookers FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 WHERE metric_time__day = '2020-01-01' GROUP BY metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON subq_26.metric_time__month = subq_31.metric_time__month GROUP BY - COALESCE(subq_26.metric_time__month, subq_31.metric_time__month) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql index 6a79859d49..eb8b97375e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0.sql @@ -150,10 +150,10 @@ FROM ( -- Change Column Aliases SELECT subq_2.ds__day AS metric_time__day - , subq_2.ds__month AS metric_time__month - , subq_2.ds__year AS metric_time__year , subq_2.ds__week + , subq_2.ds__month AS metric_time__month , subq_2.ds__quarter + , subq_2.ds__year AS metric_time__year , subq_2.ds__extract_year , subq_2.ds__extract_quarter , subq_2.ds__extract_month @@ -165,26 +165,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -303,73 +299,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -377,26 +373,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addWeeks(subq_4.metric_time__day, CAST(-1 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(week, -1, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - , subq_6.metric_time__month - , subq_6.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__day @@ -536,73 +525,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -610,19 +599,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__day - , subq_11.metric_time__month - , subq_11.metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON ( @@ -633,9 +617,7 @@ FROM ( subq_8.metric_time__year = subq_13.metric_time__year ) GROUP BY - COALESCE(subq_8.metric_time__day, subq_13.metric_time__day) - , COALESCE(subq_8.metric_time__month, subq_13.metric_time__month) - , COALESCE(subq_8.metric_time__year, subq_13.metric_time__year) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql index 00abda1b78..3afd8068a4 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_multiple_granularities__plan0_optimized.sql @@ -9,13 +9,12 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('month', ds) AS metric_time__month - , DATE_TRUNC('year', ds) AS metric_time__year + date_trunc('day', ds) AS metric_time__day + , date_trunc('month', ds) AS metric_time__month + , date_trunc('year', ds) AS metric_time__year , booking_value , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -38,22 +37,20 @@ FROM ( -- Compute Metrics via Expressions SELECT time_spine_src_28006.ds AS metric_time__day - , DATE_TRUNC('month', time_spine_src_28006.ds) AS metric_time__month - , DATE_TRUNC('year', time_spine_src_28006.ds) AS metric_time__year + , date_trunc('month', time_spine_src_28006.ds) AS metric_time__month + , date_trunc('year', time_spine_src_28006.ds) AS metric_time__year , SUM(sma_28009_cte.booking_value) AS booking_value FROM ***************************.mf_time_spine time_spine_src_28006 INNER JOIN sma_28009_cte sma_28009_cte ON - addWeeks(time_spine_src_28006.ds, CAST(-1 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(week, -1, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day GROUP BY - time_spine_src_28006.ds - , DATE_TRUNC('month', time_spine_src_28006.ds) - , DATE_TRUNC('year', time_spine_src_28006.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_23 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookers', 'metric_time__day', 'metric_time__month', 'metric_time__year'] -- Aggregate Measures @@ -68,7 +65,6 @@ FROM ( metric_time__day , metric_time__month , metric_time__year - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 ON ( @@ -79,9 +75,7 @@ FROM ( subq_23.metric_time__year = subq_27.metric_time__year ) GROUP BY - COALESCE(subq_23.metric_time__day, subq_27.metric_time__day) - , COALESCE(subq_23.metric_time__month, subq_27.metric_time__month) - , COALESCE(subq_23.metric_time__year, subq_27.metric_time__year) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , metric_time__month + , metric_time__year ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql index fa376aa49d..3a12f6186e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.booking__ds__day @@ -372,26 +366,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -510,73 +500,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -584,26 +574,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - addDays(subq_9.booking__ds__day, CAST(-14 AS Integer)) = subq_6.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_9.booking__ds__day) = subq_6.booking__ds__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.booking__ds__day = subq_13.booking__ds__day GROUP BY - COALESCE(subq_4.booking__ds__day, subq_13.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql index 0b3dbd2069..5a56d05618 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_agg_time_dim__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS booking__ds__day + date_trunc('day', ds) AS booking__ds__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -33,10 +32,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'booking__ds__day'] -- Aggregate Measures @@ -48,15 +45,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.booking__ds__day + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.booking__ds__day GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_27 ON subq_19.booking__ds__day = subq_27.booking__ds__day GROUP BY - COALESCE(subq_19.booking__ds__day, subq_27.booking__ds__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql index 90b9390431..b5edd7273a 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql @@ -246,26 +246,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -384,73 +380,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -458,23 +454,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addDays(subq_4.metric_time__day, CAST(-5 AS Integer)) = subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 WHERE subq_5.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql index 128c6aef4c..a697da42c6 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -16,21 +16,17 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , SUM(subq_11.bookings) AS bookings_5_days_ago FROM ***************************.mf_time_spine time_spine_src_28006 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON - addDays(time_spine_src_28006.ds, CAST(-5 AS Integer)) = subq_11.metric_time__day + DATEADD(day, -5, time_spine_src_28006.ds) = subq_11.metric_time__day WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' GROUP BY - time_spine_src_28006.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql index f20e88632d..b5de526d2e 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql @@ -134,53 +134,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -188,10 +188,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_1.user @@ -199,44 +197,39 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 ON subq_0.user = subq_2.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 WHERE user__home_state_latest = 'us' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing__is_lux_latest - , subq_4.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql index 1fb2b86666..a826c3ba3f 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql @@ -19,10 +19,8 @@ FROM ( ***************************.dim_users_latest users_latest_src_28000 ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE user__home_state_latest = 'us' GROUP BY listing__is_lux_latest , user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql index b2b8793552..4ead845106 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0.sql @@ -74,53 +74,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -128,10 +128,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_1.user @@ -139,41 +137,37 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 ON subq_0.user = subq_2.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.listing__is_lux_latest - , subq_3.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql index 25f8fead6f..bb82d7a9d7 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimensions_requiring_join__plan0_optimized.sql @@ -15,6 +15,5 @@ FULL OUTER JOIN ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id GROUP BY - listings_latest_src_28000.is_lux - , users_latest_src_28000.home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql index f32ff337a4..a683056a53 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_add_time_expr__plan0.sql @@ -6,6 +6,5 @@ sql_engine: Clickhouse --- -- Test Add Time Expression SELECT - addMonths('2020-01-01', CAST((1) AS Integer)) AS add_time + DATEADD(month, (1 * 3), '2020-01-01') AS add_time FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql index 1c7ecc7adc..efc681d7c9 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_approximate_continuous_percentile_expr__plan0.sql @@ -8,4 +8,3 @@ sql_engine: Clickhouse SELECT quantile(0.5)(a.col0) AS col0_percentile FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql index 4a5ae5e2c0..3574ac3719 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql @@ -6,6 +6,5 @@ sql_engine: Clickhouse --- -- Test Cast to Timestamp Expression SELECT - CAST('2020-01-01' AS TIMESTAMP) AS col0 + toDateTime('2020-01-01') AS col0 FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql index 7159152563..57595598cb 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_continuous_percentile_expr__plan0.sql @@ -8,4 +8,3 @@ sql_engine: Clickhouse SELECT quantile(0.5)(a.col0) AS col0_percentile FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql index be9a1256f5..0db816898b 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_discrete_percentile_expr__plan0.sql @@ -8,4 +8,3 @@ sql_engine: Clickhouse SELECT quantileExact(0.5)(a.col0) AS col0_percentile FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql index 1a0fb11e77..034b690856 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_generate_uuid__plan0.sql @@ -8,4 +8,3 @@ sql_engine: Clickhouse SELECT generateUUIDv4() AS uuid FROM foo.bar a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql index 5ff4513561..58564fe938 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_5.metric_time__day @@ -169,10 +165,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -291,73 +285,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -365,20 +359,19 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_6 ON subq_9.metric_time__day = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql index 7b101b7756..547f32a3ae 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql @@ -12,8 +12,7 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , subq_17.bookers AS bookers FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Join Self Over Time Range -- Pass Only Elements: ['bookers', 'metric_time__day'] -- Aggregate Measures @@ -21,14 +20,17 @@ FROM ( subq_14.ds AS metric_time__day , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers FROM ***************************.mf_time_spine subq_14 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_14.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_14.ds) + ) GROUP BY - subq_14.ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_17 ON time_spine_src_28006.ds = subq_17.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql index ee6d69f599..31e00153ea 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0.sql @@ -45,26 +45,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__day @@ -193,73 +189,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -267,24 +263,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 ON subq_6.metric_time__day = subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_16.metric_time__day @@ -423,26 +412,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_9.ds__day @@ -561,73 +546,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -635,26 +620,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - addDays(subq_13.metric_time__day, CAST(-14 AS Integer)) = subq_10.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_13.metric_time__day) = subq_10.metric_time__day ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 GROUP BY - subq_15.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 ON subq_8.metric_time__day = subq_17.metric_time__day GROUP BY - COALESCE(subq_8.metric_time__day, subq_17.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql index e8db501100..5f54721fa9 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql @@ -7,10 +7,9 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28018_cte AS ( @@ -18,7 +17,6 @@ WITH sma_28009_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -41,8 +39,7 @@ FROM ( rss_28018_cte.ds__day AS metric_time__day , subq_22.bookings AS bookings FROM rss_28018_cte rss_28018_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -52,16 +49,12 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 ON rss_28018_cte.ds__day = subq_22.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -73,15 +66,12 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(rss_28018_cte.ds__day, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(day, -14, rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day GROUP BY - rss_28018_cte.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_35 ON subq_27.metric_time__day = subq_35.metric_time__day GROUP BY - COALESCE(subq_27.metric_time__day, subq_35.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_36 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql index 0281708dea..757613d3e8 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql @@ -18,7 +18,9 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_6.ds__week + subq_6.metric_time__day + , subq_6.ds__week + , subq_6.metric_time__month , subq_6.ds__quarter , subq_6.ds__year , subq_6.ds__extract_year @@ -28,14 +30,12 @@ FROM ( , subq_6.ds__extract_dow , subq_6.ds__extract_doy , subq_6.ds__martian_day - , subq_6.metric_time__day - , subq_6.metric_time__month FROM ( -- Change Column Aliases SELECT subq_5.ds__day AS metric_time__day - , subq_5.ds__month AS metric_time__month , subq_5.ds__week + , subq_5.ds__month AS metric_time__month , subq_5.ds__quarter , subq_5.ds__year , subq_5.ds__extract_year @@ -49,29 +49,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -301,73 +296,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -375,21 +370,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 ON subq_8.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql index d39c57083c..1814dfa5fc 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql @@ -17,15 +17,12 @@ FROM ( -- Change Column Aliases SELECT ds AS metric_time__day - , DATE_TRUNC('month', ds) AS metric_time__month + , date_trunc('month', ds) AS metric_time__month FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -36,17 +33,14 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('day', ds) AS metric_time__day + , date_trunc('month', ds) AS metric_time__month , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_18.metric_time__day = subq_14.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql index 785e589394..b590186b67 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql @@ -18,7 +18,10 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_6.ds__week + subq_6.booking__ds__day + , subq_6.metric_time__day + , subq_6.ds__week + , subq_6.booking__ds__month , subq_6.ds__quarter , subq_6.ds__year , subq_6.ds__extract_year @@ -28,16 +31,13 @@ FROM ( , subq_6.ds__extract_dow , subq_6.ds__extract_doy , subq_6.ds__martian_day - , subq_6.booking__ds__day - , subq_6.metric_time__day - , subq_6.booking__ds__month FROM ( -- Change Column Aliases SELECT subq_5.ds__day AS booking__ds__day , subq_5.ds__day AS metric_time__day - , subq_5.ds__month AS booking__ds__month , subq_5.ds__week + , subq_5.ds__month AS booking__ds__month , subq_5.ds__quarter , subq_5.ds__year , subq_5.ds__extract_year @@ -51,29 +51,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.booking__ds__day @@ -303,73 +298,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -377,21 +372,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__ds__day ) subq_4 ON subq_8.booking__ds__day = subq_4.booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql index 4934285347..39fad27979 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql @@ -18,15 +18,12 @@ FROM ( SELECT ds AS booking__ds__day , ds AS metric_time__day - , DATE_TRUNC('month', ds) AS booking__ds__month + , date_trunc('month', ds) AS booking__ds__month FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'booking__ds__day'] -- Aggregate Measures @@ -37,18 +34,15 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS booking__ds__day - , DATE_TRUNC('month', ds) AS booking__ds__month - , DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS booking__ds__day + , date_trunc('month', ds) AS booking__ds__month + , date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') GROUP BY booking__ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_18.booking__ds__day = subq_14.booking__ds__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql index 4e0c5a1118..8446e6f9c6 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql @@ -18,7 +18,9 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_6.ds__week + subq_6.metric_time__day + , subq_6.ds__week + , subq_6.booking__ds__month , subq_6.ds__quarter , subq_6.ds__year , subq_6.ds__extract_year @@ -28,14 +30,12 @@ FROM ( , subq_6.ds__extract_dow , subq_6.ds__extract_doy , subq_6.ds__martian_day - , subq_6.metric_time__day - , subq_6.booking__ds__month FROM ( -- Change Column Aliases SELECT subq_5.ds__day AS metric_time__day - , subq_5.ds__month AS booking__ds__month , subq_5.ds__week + , subq_5.ds__month AS booking__ds__month , subq_5.ds__quarter , subq_5.ds__year , subq_5.ds__extract_year @@ -49,29 +49,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -301,73 +296,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -375,21 +370,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 ON subq_8.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql index cf3849813c..6d6510957a 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql @@ -17,15 +17,12 @@ FROM ( -- Change Column Aliases SELECT ds AS metric_time__day - , DATE_TRUNC('month', ds) AS booking__ds__month + , date_trunc('month', ds) AS booking__ds__month FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -36,17 +33,14 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('month', ds) AS booking__ds__month - , DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('month', ds) AS booking__ds__month + , date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_18.metric_time__day = subq_14.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql index 66ca954900..df50dc8452 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql @@ -18,7 +18,9 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_6.ts__week + subq_6.metric_time__hour + , subq_6.metric_time__day + , subq_6.ts__week , subq_6.ts__month , subq_6.ts__quarter , subq_6.ts__year @@ -28,13 +30,11 @@ FROM ( , subq_6.ts__extract_day , subq_6.ts__extract_dow , subq_6.ts__extract_doy - , subq_6.metric_time__day - , subq_6.metric_time__hour FROM ( -- Change Column Aliases SELECT - subq_5.ts__day AS metric_time__day - , subq_5.ts__hour AS metric_time__hour + subq_5.ts__hour AS metric_time__hour + , subq_5.ts__day AS metric_time__day , subq_5.ts__week , subq_5.ts__month , subq_5.ts__quarter @@ -49,31 +49,26 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -474,199 +469,192 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 ON subq_8.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql index 299f69d93a..6129187851 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql @@ -16,18 +16,15 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' -- Change Column Aliases SELECT - DATE_TRUNC('day', ts) AS metric_time__day - , ts AS metric_time__hour + ts AS metric_time__hour + , date_trunc('day', ts) AS metric_time__day FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['archived_users', 'metric_time__day'] -- Aggregate Measures @@ -38,17 +35,14 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour - , DATE_TRUNC('day', archived_at) AS metric_time__day + date_trunc('hour', archived_at) AS metric_time__hour + , date_trunc('day', archived_at) AS metric_time__day , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_18.metric_time__day = subq_14.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql index 5b3a9ad3b3..a0ab8a9514 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql @@ -23,7 +23,9 @@ FROM ( FROM ( -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] SELECT - subq_8.ds__month + subq_8.metric_time__day + , subq_8.metric_time__week + , subq_8.ds__month , subq_8.ds__quarter , subq_8.ds__year , subq_8.ds__extract_year @@ -33,12 +35,12 @@ FROM ( , subq_8.ds__extract_dow , subq_8.ds__extract_doy , subq_8.ds__martian_day - , subq_8.metric_time__day - , subq_8.metric_time__week FROM ( -- Constrain Output with WHERE SELECT - subq_7.ds__month + subq_7.metric_time__day + , subq_7.metric_time__week + , subq_7.ds__month , subq_7.ds__quarter , subq_7.ds__year , subq_7.ds__extract_year @@ -48,8 +50,6 @@ FROM ( , subq_7.ds__extract_dow , subq_7.ds__extract_doy , subq_7.ds__martian_day - , subq_7.metric_time__day - , subq_7.metric_time__week FROM ( -- Change Column Aliases SELECT @@ -69,32 +69,26 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE metric_time__week > '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE subq_8.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_4.metric_time__day @@ -425,73 +419,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -499,27 +493,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 WHERE metric_time__week > '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_5 ON subq_10.metric_time__day = subq_5.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE subq_11.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql index 3a926ae666..2743e922c2 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql @@ -23,19 +23,16 @@ FROM ( -- Change Column Aliases SELECT ds AS metric_time__day - , DATE_TRUNC('week', ds) AS metric_time__week + , date_trunc('week', ds) AS metric_time__week FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 WHERE ( metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' ) AND ( metric_time__week > '2020-01-01' ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -47,21 +44,17 @@ FROM ( -- Metric Time Dimension 'ds' -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('week', ds) AS metric_time__week + date_trunc('day', ds) AS metric_time__day + , date_trunc('week', ds) AS metric_time__week , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' ) subq_15 WHERE metric_time__week > '2020-01-01' GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 ON subq_23.metric_time__day = subq_18.metric_time__day WHERE subq_23.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql index a96eef7594..ce895e8303 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__day @@ -182,73 +178,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -256,18 +252,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 ON subq_6.metric_time__day = subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql index 5cd27eefea..fb1d6346a0 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql @@ -12,8 +12,7 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , subq_11.bookings AS bookings FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__day @@ -23,17 +22,13 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON time_spine_src_28006.ds = subq_11.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql index 4d0bcaac82..a538cc8eb2 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0.sql @@ -18,9 +18,9 @@ FROM ( FROM ( -- Change Column Aliases SELECT - subq_4.ds__month AS metric_time__month - , subq_4.ds__day + subq_4.ds__day , subq_4.ds__week + , subq_4.ds__month AS metric_time__month , subq_4.ds__quarter , subq_4.ds__year , subq_4.ds__extract_year @@ -34,28 +34,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__month @@ -184,73 +180,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -258,18 +254,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_3 ON subq_6.metric_time__month = subq_3.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql index 9b2a1e6f71..3eeca95fad 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_month__plan0_optimized.sql @@ -16,14 +16,12 @@ FROM ( -- Change Column Aliases -- Pass Only Elements: ['metric_time__month',] SELECT - DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('month', ds) AS metric_time__month FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - DATE_TRUNC('month', ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__month ) subq_14 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__month @@ -33,17 +31,13 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__month'] SELECT - DATE_TRUNC('month', ds) AS metric_time__month + date_trunc('month', ds) AS metric_time__month , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_14.metric_time__month = subq_11.metric_time__month - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql index 6ec4d8a4eb..30ba88aab2 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql @@ -135,73 +135,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -209,14 +209,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__is_instant ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql index 0fa1aa6b65..d9989b1124 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql @@ -19,10 +19,7 @@ FROM ( is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql index a7606b9c93..2905ba9bc7 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql @@ -135,73 +135,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -209,14 +209,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.booking__paid_at__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__paid_at__day ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql index f991e57ce6..30a38f152f 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql @@ -16,13 +16,10 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'booking__paid_at__day'] SELECT - DATE_TRUNC('day', paid_at) AS booking__paid_at__day + date_trunc('day', paid_at) AS booking__paid_at__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY booking__paid_at__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql index 42d47af5d1..c3be1146ee 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0.sql @@ -135,73 +135,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -209,14 +209,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql index ecd85c80ea..c97b82cc13 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql @@ -16,13 +16,10 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql index 470c1067f8..1c215fd434 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0.sql @@ -146,73 +146,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -220,20 +220,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__extract_dow - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_12.metric_time__extract_dow @@ -358,7 +352,6 @@ FROM ( -- Change Column Aliases SELECT subq_7.ds__day AS metric_time__day - , subq_7.ds__extract_dow AS metric_time__extract_dow , subq_7.ds__week , subq_7.ds__month , subq_7.ds__quarter @@ -367,32 +360,29 @@ FROM ( , subq_7.ds__extract_quarter , subq_7.ds__extract_month , subq_7.ds__extract_day + , subq_7.ds__extract_dow AS metric_time__extract_dow , subq_7.ds__extract_doy , subq_7.ds__martian_day FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_5.ds__day @@ -511,73 +501,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -585,26 +575,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON - addDays(subq_9.metric_time__day, CAST(-14 AS Integer)) = subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_9.metric_time__day) = subq_6.metric_time__day ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 GROUP BY - subq_11.metric_time__extract_dow - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_4.metric_time__extract_dow = subq_13.metric_time__extract_dow GROUP BY - COALESCE(subq_4.metric_time__extract_dow, subq_13.metric_time__extract_dow) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_14 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql index 00dc2821bb..029cb4e858 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_offset_window_with_date_part__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day - , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + date_trunc('day', ds) AS metric_time__day + , toDayOfWeek(ds) AS metric_time__extract_dow , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,30 +33,25 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__extract_dow - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Join to Time Spine Dataset -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] -- Aggregate Measures -- Compute Metrics via Expressions SELECT - EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS metric_time__extract_dow + toDayOfWeek(time_spine_src_28006.ds) AS metric_time__extract_dow , SUM(sma_28009_cte.bookings) AS bookings_2_weeks_ago FROM ***************************.mf_time_spine time_spine_src_28006 INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day GROUP BY - EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_27 ON subq_19.metric_time__extract_dow = subq_27.metric_time__extract_dow GROUP BY - COALESCE(subq_19.metric_time__extract_dow, subq_27.metric_time__extract_dow) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_28 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql index bbf4d6ce09..4bc03890ed 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0.sql @@ -238,73 +238,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -312,12 +312,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['user__ds_partitioned__day', 'user__bio_added_ts__minute', 'listing'] SELECT subq_7.user__ds_partitioned__day @@ -568,53 +565,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -622,12 +619,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'home_state', -- 'user__home_state', @@ -1204,195 +1198,190 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON subq_3.user = subq_6.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 ON ( @@ -1400,12 +1389,8 @@ FROM ( ) AND ( subq_1.ds_partitioned__day = subq_8.user__ds_partitioned__day ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.listing__user__bio_added_ts__minute - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user__bio_added_ts__minute ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql index 5448684cb4..c17ffbe109 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_joined_sub_daily_dimension__plan0_optimized.sql @@ -13,26 +13,23 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + date_trunc('day', ds_partitioned) AS ds_partitioned__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['user__ds_partitioned__day', 'user__bio_added_ts__minute', 'listing'] SELECT - DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute , listings_latest_src_28000.listing_id AS listing FROM ***************************.dim_listings_latest listings_latest_src_28000 LEFT OUTER JOIN ***************************.dim_users users_ds_source_src_28000 ON listings_latest_src_28000.user_id = users_ds_source_src_28000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 ON ( @@ -41,5 +38,4 @@ ON subq_13.ds_partitioned__day = subq_20.user__ds_partitioned__day ) GROUP BY - subq_20.user__bio_added_ts__minute -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user__bio_added_ts__minute diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql index b5b0bead27..5f0e2d44ba 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0.sql @@ -213,192 +213,187 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.user__archived_at__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__archived_at__hour ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql index 680ed70944..23498cbb71 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_metric_with_sub_daily_dimension__plan0_optimized.sql @@ -12,11 +12,9 @@ FROM ( -- Metric Time Dimension 'created_at' -- Pass Only Elements: ['new_users', 'user__archived_at__hour'] SELECT - DATE_TRUNC('hour', archived_at) AS user__archived_at__hour + date_trunc('hour', archived_at) AS user__archived_at__hour , 1 AS new_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY user__archived_at__hour -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql index 02f4644c5e..5e432c0bea 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0.sql @@ -135,73 +135,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -209,14 +209,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__extract_dow - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_dow ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql index c006f8e506..b091de2e47 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_date_part__plan0_optimized.sql @@ -12,11 +12,9 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__extract_dow'] SELECT - EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow + toDayOfWeek(ds) AS metric_time__extract_dow , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY metric_time__extract_dow -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql index d5ad5bbae9..9d20f324e2 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0.sql @@ -158,73 +158,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -232,19 +232,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__extract_year - , subq_2.metric_time__extract_quarter - , subq_2.metric_time__extract_month - , subq_2.metric_time__extract_day - , subq_2.metric_time__extract_dow - , subq_2.metric_time__extract_doy - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__extract_year + , metric_time__extract_quarter + , metric_time__extract_month + , metric_time__extract_day + , metric_time__extract_dow + , metric_time__extract_doy ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql index dcf3861e38..4777bea4cb 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_simple_query_with_multiple_date_parts__plan0_optimized.sql @@ -25,15 +25,14 @@ FROM ( -- 'metric_time__extract_year', -- ] SELECT - EXTRACT(toYear FROM ds) AS metric_time__extract_year - , EXTRACT(toQuarter FROM ds) AS metric_time__extract_quarter - , EXTRACT(toMonth FROM ds) AS metric_time__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS metric_time__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS metric_time__extract_doy + toYear(ds) AS metric_time__extract_year + , toQuarter(ds) AS metric_time__extract_quarter + , toMonth(ds) AS metric_time__extract_month + , toDayOfMonth(ds) AS metric_time__extract_day + , toDayOfWeek(ds) AS metric_time__extract_dow + , toDayOfYear(ds) AS metric_time__extract_doy , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY metric_time__extract_year @@ -42,4 +41,3 @@ GROUP BY , metric_time__extract_day , metric_time__extract_dow , metric_time__extract_doy -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql index 090c7bd28d..60c1961950 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0.sql @@ -10,186 +10,184 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 GROUP BY - subq_0.user__bio_added_ts__second -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__bio_added_ts__second diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql index 486afed97c..b63414c787 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_dimension__plan0_optimized.sql @@ -5,8 +5,7 @@ sql_engine: Clickhouse -- Read Elements From Semantic Model 'users_ds_source' -- Pass Only Elements: ['user__bio_added_ts__second',] SELECT - DATE_TRUNC('second', bio_added_ts) AS user__bio_added_ts__second + date_trunc('second', bio_added_ts) AS user__bio_added_ts__second FROM ***************************.dim_users users_ds_source_src_28000 GROUP BY - DATE_TRUNC('second', bio_added_ts) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__bio_added_ts__second diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql index f128c4f788..c9093f6725 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0.sql @@ -42,25 +42,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine_millisecond' SELECT time_spine_src_28002.ts AS ts__millisecond - , DATE_TRUNC('second', time_spine_src_28002.ts) AS ts__second - , DATE_TRUNC('minute', time_spine_src_28002.ts) AS ts__minute - , DATE_TRUNC('hour', time_spine_src_28002.ts) AS ts__hour - , DATE_TRUNC('day', time_spine_src_28002.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28002.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28002.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28002.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28002.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28002.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28002.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28002.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28002.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28002.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28002.ts) AS ts__extract_doy + , date_trunc('second', time_spine_src_28002.ts) AS ts__second + , date_trunc('minute', time_spine_src_28002.ts) AS ts__minute + , date_trunc('hour', time_spine_src_28002.ts) AS ts__hour + , date_trunc('day', time_spine_src_28002.ts) AS ts__day + , date_trunc('week', time_spine_src_28002.ts) AS ts__week + , date_trunc('month', time_spine_src_28002.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28002.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28002.ts) AS ts__year + , toYear(time_spine_src_28002.ts) AS ts__extract_year + , toQuarter(time_spine_src_28002.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28002.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28002.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28002.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28002.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_millisecond time_spine_src_28002 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.metric_time__millisecond -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__millisecond diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql index cfe5e81e99..4ed91293b8 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_sub_daily_metric_time__plan0_optimized.sql @@ -9,5 +9,4 @@ SELECT ts AS metric_time__millisecond FROM ***************************.mf_time_spine_millisecond time_spine_src_28002 GROUP BY - ts -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__millisecond diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql index c87ca553da..cbb6f2f2da 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql @@ -214,10 +214,8 @@ FROM ( SELECT subq_3.ts AS metric_time__hour FROM ***************************.mf_time_spine_hour subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -415,194 +413,194 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__hour <= subq_2.metric_time__hour + ) AND ( + subq_1.metric_time__hour >= date_trunc('hour', subq_2.metric_time__hour) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql index 8235bf9d95..a9e0c4d787 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql @@ -10,16 +10,19 @@ SELECT subq_10.ts AS metric_time__hour , SUM(subq_8.archived_users) AS subdaily_cumulative_grain_to_date_metric FROM ***************************.mf_time_spine_hour subq_10 -CROSS JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 +ON + ( + subq_8.metric_time__hour <= subq_10.ts + ) AND ( + subq_8.metric_time__hour >= date_trunc('hour', subq_10.ts) + ) GROUP BY - subq_10.ts -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql index 128dc7a234..a7bc63cb58 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql @@ -214,10 +214,8 @@ FROM ( SELECT subq_3.ts AS metric_time__hour FROM ***************************.mf_time_spine_hour subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -415,194 +413,194 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__hour <= subq_2.metric_time__hour + ) AND ( + subq_1.metric_time__hour > DATEADD(hour, -3, subq_2.metric_time__hour) + ) ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql index 8db670f32f..3531b069f1 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql @@ -10,16 +10,19 @@ SELECT subq_10.ts AS metric_time__hour , SUM(subq_8.archived_users) AS subdaily_cumulative_window_metric FROM ***************************.mf_time_spine_hour subq_10 -CROSS JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 +ON + ( + subq_8.metric_time__hour <= subq_10.ts + ) AND ( + subq_8.metric_time__hour > DATEADD(hour, -3, subq_10.ts) + ) GROUP BY - subq_10.ts -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql index c185ed4b0c..f5baaaa905 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__hour @@ -261,196 +257,190 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_3 ON subq_6.metric_time__hour = subq_3.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql index 187fb12d4f..f4d8e2f0cb 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_granularity_overrides_metric_default_granularity__plan0_optimized.sql @@ -8,8 +8,7 @@ SELECT time_spine_src_28005.ts AS metric_time__hour , subq_11.archived_users AS subdaily_join_to_time_spine_metric FROM ***************************.mf_time_spine_hour time_spine_src_28005 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__hour @@ -19,15 +18,12 @@ LEFT OUTER JOIN -- Metric Time Dimension 'archived_at' -- Pass Only Elements: ['archived_users', 'metric_time__hour'] SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON time_spine_src_28005.ts = subq_11.metric_time__hour -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql index 8a86c4b323..ee7c4de6a4 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__hour @@ -261,196 +257,190 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_3 ON subq_6.metric_time__hour = subq_3.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql index 48e3219171..4118b03198 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_join_to_time_spine_metric__plan0_optimized.sql @@ -8,8 +8,7 @@ SELECT time_spine_src_28005.ts AS metric_time__hour , subq_11.archived_users AS subdaily_join_to_time_spine_metric FROM ***************************.mf_time_spine_hour time_spine_src_28005 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__hour @@ -19,15 +18,12 @@ LEFT OUTER JOIN -- Metric Time Dimension 'archived_at' -- Pass Only Elements: ['archived_users', 'metric_time__hour'] SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON time_spine_src_28005.ts = subq_11.metric_time__hour -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql index bd8238929c..562cf96edf 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0.sql @@ -237,26 +237,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -454,198 +450,191 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - DATE_TRUNC('hour', subq_4.metric_time__hour) = subq_1.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + date_trunc('hour', subq_4.metric_time__hour) = subq_1.metric_time__hour ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql index ceb08e656a..4ef5bec1a2 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_to_grain_metric__plan0_optimized.sql @@ -15,20 +15,16 @@ FROM ( time_spine_src_28005.ts AS metric_time__hour , SUM(subq_10.archived_users) AS archived_users FROM ***************************.mf_time_spine_hour time_spine_src_28005 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - DATE_TRUNC('hour', time_spine_src_28005.ts) = subq_10.metric_time__hour + date_trunc('hour', time_spine_src_28005.ts) = subq_10.metric_time__hour GROUP BY - time_spine_src_28005.ts - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql index 206b867a14..3a9484cd28 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0.sql @@ -237,26 +237,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -454,198 +450,191 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 ON - addHours(subq_4.metric_time__hour, CAST(-1 AS Integer)) = subq_1.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(hour, -1, subq_4.metric_time__hour) = subq_1.metric_time__hour ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql index 39c7a5efca..15732ee1c1 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_offset_window_metric__plan0_optimized.sql @@ -15,20 +15,16 @@ FROM ( time_spine_src_28005.ts AS metric_time__hour , SUM(subq_10.archived_users) AS archived_users FROM ***************************.mf_time_spine_hour time_spine_src_28005 - INNER JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON - addHours(time_spine_src_28005.ts, CAST(-1 AS Integer)) = subq_10.metric_time__hour + DATEADD(hour, -1, time_spine_src_28005.ts) = subq_10.metric_time__hour GROUP BY - time_spine_src_28005.ts - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql index 7e5dd368ed..f104ab2f0e 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql @@ -23,7 +23,8 @@ FROM ( FROM ( -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] SELECT - subq_6.ts__day + subq_6.metric_time__hour + , subq_6.ts__day , subq_6.ts__week , subq_6.ts__month , subq_6.ts__quarter @@ -34,7 +35,6 @@ FROM ( , subq_6.ts__extract_day , subq_6.ts__extract_dow , subq_6.ts__extract_doy - , subq_6.metric_time__hour FROM ( -- Change Column Aliases SELECT @@ -54,29 +54,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine_hour' SELECT time_spine_src_28005.ts AS ts__hour - , DATE_TRUNC('day', time_spine_src_28005.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28005.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28005.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28005.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28005.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28005.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28005.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28005.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28005.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28005.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28005.ts) AS ts__extract_doy + , date_trunc('day', time_spine_src_28005.ts) AS ts__day + , date_trunc('week', time_spine_src_28005.ts) AS ts__week + , date_trunc('month', time_spine_src_28005.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28005.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28005.ts) AS ts__year + , toYear(time_spine_src_28005.ts) AS ts__extract_year + , toQuarter(time_spine_src_28005.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28005.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28005.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28005.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28005.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_hour time_spine_src_28005 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE subq_6.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__hour @@ -477,202 +472,194 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__hour ) subq_4 ON subq_8.metric_time__hour = subq_4.metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 WHERE subq_9.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql index 5a6b3ab427..be5742ffd2 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql @@ -17,10 +17,8 @@ FROM ( ts AS metric_time__hour FROM ***************************.mf_time_spine_hour time_spine_src_28005 WHERE ts BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__hour @@ -31,17 +29,14 @@ LEFT OUTER JOIN -- Constrain Time Range to [2020-01-01T02:00:00, 2020-01-01T05:00:00] -- Pass Only Elements: ['archived_users', 'metric_time__hour'] SELECT - DATE_TRUNC('hour', archived_at) AS metric_time__hour + date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - WHERE DATE_TRUNC('hour', archived_at) BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('hour', archived_at) BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' ) subq_14 GROUP BY metric_time__hour - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_19.metric_time__hour = subq_15.metric_time__hour WHERE subq_19.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql index 8818ef023d..5642f3903f 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql @@ -71,27 +71,23 @@ FROM ( -- Read From Time Spine 'mf_time_spine_second' SELECT time_spine_src_28003.ts AS ts__second - , DATE_TRUNC('minute', time_spine_src_28003.ts) AS ts__minute - , DATE_TRUNC('hour', time_spine_src_28003.ts) AS ts__hour - , DATE_TRUNC('day', time_spine_src_28003.ts) AS ts__day - , DATE_TRUNC('week', time_spine_src_28003.ts) AS ts__week - , DATE_TRUNC('month', time_spine_src_28003.ts) AS ts__month - , DATE_TRUNC('quarter', time_spine_src_28003.ts) AS ts__quarter - , DATE_TRUNC('year', time_spine_src_28003.ts) AS ts__year - , EXTRACT(toYear FROM time_spine_src_28003.ts) AS ts__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28003.ts) AS ts__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28003.ts) AS ts__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28003.ts) AS ts__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28003.ts) AS ts__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28003.ts) AS ts__extract_doy + , date_trunc('minute', time_spine_src_28003.ts) AS ts__minute + , date_trunc('hour', time_spine_src_28003.ts) AS ts__hour + , date_trunc('day', time_spine_src_28003.ts) AS ts__day + , date_trunc('week', time_spine_src_28003.ts) AS ts__week + , date_trunc('month', time_spine_src_28003.ts) AS ts__month + , date_trunc('quarter', time_spine_src_28003.ts) AS ts__quarter + , date_trunc('year', time_spine_src_28003.ts) AS ts__year + , toYear(time_spine_src_28003.ts) AS ts__extract_year + , toQuarter(time_spine_src_28003.ts) AS ts__extract_quarter + , toMonth(time_spine_src_28003.ts) AS ts__extract_month + , toDayOfMonth(time_spine_src_28003.ts) AS ts__extract_day + , toDayOfWeek(time_spine_src_28003.ts) AS ts__extract_dow + , toDayOfYear(time_spine_src_28003.ts) AS ts__extract_doy FROM ***************************.mf_time_spine_second time_spine_src_28003 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__second BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__second -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__second diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql index f886c343bb..aa9cb2dfaf 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql @@ -11,5 +11,4 @@ SELECT FROM ***************************.mf_time_spine_second time_spine_src_28003 WHERE ts BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' GROUP BY - ts -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__second diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql index 4d434526dc..03881e2635 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql @@ -28,10 +28,8 @@ FROM ( , lux_listing_mapping_src_28000.lux_listing_id AS lux_listing , lux_listing_mapping_src_28000.lux_listing_id AS listing__lux_listing FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookings'] SELECT subq_5.listing @@ -170,73 +168,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -244,27 +242,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON subq_0.listing = subq_6.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE listing__bookings > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.listing -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql index b54dff2b12..502906c2be 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql @@ -14,8 +14,7 @@ FROM ( subq_15.listing__bookings AS listing__bookings , lux_listing_mapping_src_28000.listing_id AS listing FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_28000 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions -- Pass Only Elements: ['listing', 'listing__bookings'] @@ -30,17 +29,13 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON lux_listing_mapping_src_28000.listing_id = subq_15.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE listing__bookings > 2 GROUP BY listing -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql index 712508ce66..dd2fee09e2 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql @@ -338,73 +338,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -412,12 +412,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['guest', 'guest__booking_value'] SELECT subq_6.guest @@ -556,73 +553,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -630,29 +627,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.guest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + guest ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.guest = subq_7.guest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE guest__booking_value > 1.00 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql index c9bfe6c613..5a5e5a441d 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql @@ -16,7 +16,6 @@ WITH sma_28009_cte AS ( , booking_value , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -33,10 +32,8 @@ FROM ( , booking_value , bookers FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['booking_value', 'guest'] -- Aggregate Measures @@ -48,11 +45,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY guest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 ON subq_13.guest = subq_18.guest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 WHERE guest__booking_value > 1.00 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql index 6e2d0f8b19..cc04f65752 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql @@ -231,53 +231,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -285,12 +285,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['user', 'user__visit_buy_conversion_rate'] SELECT subq_17.user @@ -365,47 +362,42 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_14.user @@ -506,43 +498,39 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -657,80 +645,71 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + ) ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 GROUP BY - subq_14.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_15 ON subq_5.user = subq_15.user GROUP BY - COALESCE(subq_5.user, subq_15.user) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 ON subq_1.user = subq_18.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 WHERE user__visit_buy_conversion_rate > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql index 5a4b8ca9dc..5ecf3e8520 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql @@ -10,11 +10,10 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -31,10 +30,8 @@ FROM ( user_id AS user , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Combine Aggregated Outputs SELECT COALESCE(subq_28.user, subq_37.user) AS user @@ -49,11 +46,9 @@ FROM ( , SUM(visits) AS visits FROM sma_28019_cte sma_28019_cte GROUP BY - sma_28019_cte.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_28 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of INF -- Pass Only Elements: ['buys', 'user'] -- Aggregate Measures @@ -90,34 +85,33 @@ FROM ( , subq_33.mf_internal_uuid AS mf_internal_uuid , subq_33.buys AS buys FROM sma_28019_cte sma_28019_cte - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_33 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + sma_28019_cte.user = subq_33.user + ) AND ( + (sma_28019_cte.metric_time__day <= subq_33.metric_time__day) + ) ) subq_34 GROUP BY - subq_34.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_37 ON subq_28.user = subq_37.user GROUP BY - COALESCE(subq_28.user, subq_37.user) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_38 ON subq_24.user = subq_38.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_41 WHERE user__visit_buy_conversion_rate > 2 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql index 937ce0618c..2974a6d062 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql @@ -233,53 +233,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -287,12 +287,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing__user', 'listing__user__average_booking_value'] SELECT subq_10.listing__user @@ -533,73 +530,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -607,12 +604,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'user'] SELECT subq_5.listing @@ -693,53 +687,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -747,35 +741,22 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON subq_3.listing = subq_6.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.listing__user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_1.user = subq_11.listing__user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 WHERE user__listing__user__average_booking_value > 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql index 10ccd94734..c271c9aaa6 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql @@ -14,7 +14,6 @@ WITH sma_28014_cte AS ( , user_id AS user , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -25,8 +24,7 @@ FROM ( subq_26.listing__user__average_booking_value AS user__listing__user__average_booking_value , sma_28014_cte.listings AS listings FROM sma_28014_cte sma_28014_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['average_booking_value', 'listing__user'] -- Aggregate Measures @@ -41,12 +39,9 @@ FROM ( ON bookings_source_src_28000.listing_id = sma_28014_cte.listing GROUP BY - sma_28014_cte.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__user ) subq_26 ON sma_28014_cte.user = subq_26.listing__user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 WHERE user__listing__user__average_booking_value > 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql index 8a148b0aa2..a4af158bf6 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql @@ -144,37 +144,34 @@ FROM ( SELECT third_hop_table_src_22000.customer_third_hop_id AS third_hop_count , third_hop_table_src_22000.value - , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day - , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week - , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month - , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter - , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year - , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year - , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter - , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month - , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day - , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow - , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy + , date_trunc('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day + , date_trunc('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week + , date_trunc('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month + , date_trunc('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter + , date_trunc('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year + , toYear(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year + , toQuarter(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter + , toMonth(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month + , toDayOfMonth(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day + , toDayOfWeek(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow + , toDayOfYear(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy , third_hop_table_src_22000.value AS customer_third_hop_id__value - , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day - , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week - , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month - , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter - , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year - , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year - , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter - , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month - , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day - , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow - , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy + , date_trunc('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day + , date_trunc('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week + , date_trunc('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month + , date_trunc('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter + , date_trunc('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year + , toYear(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year + , toQuarter(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter + , toMonth(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month + , toDayOfMonth(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day + , toDayOfWeek(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow + , toDayOfYear(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy , third_hop_table_src_22000.customer_third_hop_id FROM ***************************.third_hop_table third_hop_table_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['account_id__customer_id__customer_third_hop_id', 'account_id__customer_id__customer_third_hop_id__txn_count'] SELECT subq_14.account_id__customer_id__customer_third_hop_id @@ -324,60 +321,57 @@ FROM ( -- Read Elements From Semantic Model 'account_month_txns' SELECT account_month_txns_src_22000.txn_count - , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS ds__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS ds__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS ds__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS ds__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS ds__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS ds__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year + , toYear(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds) AS ds__day + , date_trunc('week', account_month_txns_src_22000.ds) AS ds__week + , date_trunc('month', account_month_txns_src_22000.ds) AS ds__month + , date_trunc('quarter', account_month_txns_src_22000.ds) AS ds__quarter + , date_trunc('year', account_month_txns_src_22000.ds) AS ds__year + , toYear(account_month_txns_src_22000.ds) AS ds__extract_year + , toQuarter(account_month_txns_src_22000.ds) AS ds__extract_quarter + , toMonth(account_month_txns_src_22000.ds) AS ds__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds) AS ds__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds) AS ds__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds) AS ds__extract_doy , account_month_txns_src_22000.account_month - , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy - , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS account_id__ds__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS account_id__ds__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS account_id__ds__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS account_id__ds__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , date_trunc('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , date_trunc('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , date_trunc('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , date_trunc('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , toYear(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , toQuarter(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , toMonth(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds) AS account_id__ds__day + , date_trunc('week', account_month_txns_src_22000.ds) AS account_id__ds__week + , date_trunc('month', account_month_txns_src_22000.ds) AS account_id__ds__month + , date_trunc('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter + , date_trunc('year', account_month_txns_src_22000.ds) AS account_id__ds__year + , toYear(account_month_txns_src_22000.ds) AS account_id__ds__extract_year + , toQuarter(account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter + , toMonth(account_month_txns_src_22000.ds) AS account_id__ds__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds) AS account_id__ds__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds) AS account_id__ds__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds) AS account_id__ds__extract_doy , account_month_txns_src_22000.account_month AS account_id__account_month , account_month_txns_src_22000.account_id FROM ***************************.account_month_txns account_month_txns_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['ds_partitioned__day', 'account_id', 'customer_id__customer_third_hop_id'] SELECT subq_9.ds_partitioned__day @@ -537,53 +531,50 @@ FROM ( SELECT account_id || customer_id AS account_customer_combos , bridge_table_src_22000.extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy , bridge_table_src_22000.extra_dim AS account_id__extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy , bridge_table_src_22000.extra_dim AS bridge_account__extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy , bridge_table_src_22000.account_id , bridge_table_src_22000.customer_id , bridge_table_src_22000.customer_id AS account_id__customer_id , bridge_table_src_22000.account_id AS bridge_account__account_id , bridge_table_src_22000.customer_id AS bridge_account__customer_id FROM ***************************.bridge_table bridge_table_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'country', -- 'customer_id__country', @@ -749,57 +740,52 @@ FROM ( SELECT 1 AS customers_with_other_data , customer_other_data_src_22000.country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy , customer_other_data_src_22000.country AS customer_id__country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy , customer_other_data_src_22000.country AS customer_third_hop_id__country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy , customer_other_data_src_22000.customer_id , customer_other_data_src_22000.customer_third_hop_id , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id , customer_other_data_src_22000.customer_id AS customer_third_hop_id__customer_id FROM ***************************.customer_other_data customer_other_data_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 ON subq_5.customer_id = subq_8.customer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON ( @@ -807,27 +793,17 @@ FROM ( ) AND ( subq_3.ds_partitioned__day = subq_10.ds_partitioned__day ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY - subq_12.account_id__customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + account_id__customer_id__customer_third_hop_id ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_1.customer_third_hop_id = subq_15.account_id__customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql index 07e56b938c..4711fabb4a 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql @@ -16,8 +16,7 @@ FROM ( subq_35.account_id__customer_id__customer_third_hop_id__txn_count AS customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count , third_hop_table_src_22000.customer_third_hop_id AS third_hop_count FROM ***************************.third_hop_table third_hop_table_src_22000 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['txn_count', 'account_id__customer_id__customer_third_hop_id'] -- Aggregate Measures @@ -27,12 +26,11 @@ FROM ( subq_30.customer_id__customer_third_hop_id AS account_id__customer_id__customer_third_hop_id , SUM(account_month_txns_src_22000.txn_count) AS account_id__customer_id__customer_third_hop_id__txn_count FROM ***************************.account_month_txns account_month_txns_src_22000 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['ds_partitioned__day', 'account_id', 'customer_id__customer_third_hop_id'] SELECT - DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + date_trunc('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day , bridge_table_src_22000.account_id AS account_id , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id FROM ***************************.bridge_table bridge_table_src_22000 @@ -40,21 +38,17 @@ FROM ( ***************************.customer_other_data customer_other_data_src_22000 ON bridge_table_src_22000.customer_id = customer_other_data_src_22000.customer_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 ON ( account_month_txns_src_22000.account_id = subq_30.account_id ) AND ( - DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) = subq_30.ds_partitioned__day + date_trunc('day', account_month_txns_src_22000.ds_partitioned) = subq_30.ds_partitioned__day ) GROUP BY - subq_30.customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + account_id__customer_id__customer_third_hop_id ) subq_35 ON third_hop_table_src_22000.customer_third_hop_id = subq_35.account_id__customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_36 WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql index 617a52e6f7..b8ec8bdf74 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql @@ -144,37 +144,34 @@ FROM ( SELECT third_hop_table_src_22000.customer_third_hop_id AS third_hop_count , third_hop_table_src_22000.value - , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day - , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week - , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month - , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter - , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year - , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year - , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter - , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month - , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day - , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow - , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy + , date_trunc('day', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__day + , date_trunc('week', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__week + , date_trunc('month', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__month + , date_trunc('quarter', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__quarter + , date_trunc('year', third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__year + , toYear(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_year + , toQuarter(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_quarter + , toMonth(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_month + , toDayOfMonth(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_day + , toDayOfWeek(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_dow + , toDayOfYear(third_hop_table_src_22000.third_hop_ds) AS third_hop_ds__extract_doy , third_hop_table_src_22000.value AS customer_third_hop_id__value - , DATE_TRUNC('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day - , DATE_TRUNC('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week - , DATE_TRUNC('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month - , DATE_TRUNC('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter - , DATE_TRUNC('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year - , EXTRACT(toYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year - , EXTRACT(toQuarter FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter - , EXTRACT(toMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month - , EXTRACT(toDayOfMonth FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day - , EXTRACT(toDayOfWeek FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow - , EXTRACT(toDayOfYear FROM third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy + , date_trunc('day', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__day + , date_trunc('week', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__week + , date_trunc('month', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__month + , date_trunc('quarter', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__quarter + , date_trunc('year', third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__year + , toYear(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_year + , toQuarter(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_quarter + , toMonth(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_month + , toDayOfMonth(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_day + , toDayOfWeek(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_dow + , toDayOfYear(third_hop_table_src_22000.third_hop_ds) AS customer_third_hop_id__third_hop_ds__extract_doy , third_hop_table_src_22000.customer_third_hop_id FROM ***************************.third_hop_table third_hop_table_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['customer_id__customer_third_hop_id', 'customer_id__customer_third_hop_id__paraguayan_customers'] SELECT subq_7.customer_id__customer_third_hop_id @@ -309,72 +306,60 @@ FROM ( SELECT 1 AS customers_with_other_data , customer_other_data_src_22000.country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS acquired_ds__extract_doy , customer_other_data_src_22000.country AS customer_id__country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS customer_id__acquired_ds__extract_doy , customer_other_data_src_22000.country AS customer_third_hop_id__country - , DATE_TRUNC('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day - , DATE_TRUNC('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week - , DATE_TRUNC('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month - , DATE_TRUNC('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter - , DATE_TRUNC('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year - , EXTRACT(toYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year - , EXTRACT(toQuarter FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter - , EXTRACT(toMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month - , EXTRACT(toDayOfMonth FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day - , EXTRACT(toDayOfWeek FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow - , EXTRACT(toDayOfYear FROM customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy + , date_trunc('day', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__day + , date_trunc('week', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__week + , date_trunc('month', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__month + , date_trunc('quarter', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__quarter + , date_trunc('year', customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__year + , toYear(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_year + , toQuarter(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_quarter + , toMonth(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_month + , toDayOfMonth(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_day + , toDayOfWeek(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_dow + , toDayOfYear(customer_other_data_src_22000.acquired_ds) AS customer_third_hop_id__acquired_ds__extract_doy , customer_other_data_src_22000.customer_id , customer_other_data_src_22000.customer_third_hop_id , customer_other_data_src_22000.customer_third_hop_id AS customer_id__customer_third_hop_id , customer_other_data_src_22000.customer_id AS customer_third_hop_id__customer_id FROM ***************************.customer_other_data customer_other_data_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 WHERE customer_id__country = 'paraguay' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 GROUP BY - subq_5.customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + customer_id__customer_third_hop_id ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 ON subq_1.customer_third_hop_id = subq_8.customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql index bb84ce2f94..4eddcb5edf 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql @@ -16,8 +16,7 @@ FROM ( subq_21.customer_id__customer_third_hop_id__paraguayan_customers AS customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers , third_hop_table_src_22000.customer_third_hop_id AS third_hop_count FROM ***************************.third_hop_table third_hop_table_src_22000 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['customers_with_other_data', 'customer_id__customer_third_hop_id'] -- Aggregate Measures @@ -34,16 +33,12 @@ FROM ( , country AS customer_id__country , 1 AS customers_with_other_data FROM ***************************.customer_other_data customer_other_data_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE customer_id__country = 'paraguay' GROUP BY customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON third_hop_table_src_22000.customer_third_hop_id = subq_21.customer_id__customer_third_hop_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql index 7f2748be34..9fcd733d4d 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql @@ -338,73 +338,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -412,12 +412,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookers'] SELECT subq_6.listing @@ -556,73 +553,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -630,29 +627,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.listing = subq_7.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE listing__bookers > 1.00 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql index ac66d79437..3a7f77c7fd 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql @@ -15,7 +15,6 @@ WITH sma_28009_cte AS ( listing_id AS listing , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -31,10 +30,8 @@ FROM ( listing , bookers FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookers', 'listing'] -- Aggregate Measures @@ -46,11 +43,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 ON subq_13.listing = subq_18.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 WHERE listing__bookers > 1.00 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql index f971d395d4..32e53f48b9 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql @@ -236,53 +236,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -290,12 +290,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookings'] SELECT subq_6.listing @@ -434,73 +431,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -508,31 +505,20 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.listing = subq_7.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE listing__bookings > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql index 6f2464aa43..35ce49a9f4 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql @@ -21,14 +21,12 @@ FROM ( -- Read Elements From Semantic Model 'listings_latest' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , listing_id AS listing , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions -- Pass Only Elements: ['listing', 'listing__bookings'] @@ -43,17 +41,13 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 ON subq_13.listing = subq_19.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 WHERE listing__bookings > 2 GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql index 88a39d97b4..d08363bd3c 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql @@ -235,53 +235,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -289,12 +289,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['user', 'user__revenue_all_time'] SELECT subq_6.user @@ -357,54 +354,43 @@ FROM ( -- Read Elements From Semantic Model 'revenue' SELECT revenue_src_28000.revenue AS txn_revenue - , DATE_TRUNC('day', revenue_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', revenue_src_28000.created_at) AS revenue_instance__ds__day - , DATE_TRUNC('week', revenue_src_28000.created_at) AS revenue_instance__ds__week - , DATE_TRUNC('month', revenue_src_28000.created_at) AS revenue_instance__ds__month - , DATE_TRUNC('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter - , DATE_TRUNC('year', revenue_src_28000.created_at) AS revenue_instance__ds__year - , EXTRACT(toYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_year - , EXTRACT(toQuarter FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter - , EXTRACT(toMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_month - , EXTRACT(toDayOfMonth FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_day - , EXTRACT(toDayOfWeek FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow - , EXTRACT(toDayOfYear FROM revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS ds__day + , date_trunc('week', revenue_src_28000.created_at) AS ds__week + , date_trunc('month', revenue_src_28000.created_at) AS ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS ds__year + , toYear(revenue_src_28000.created_at) AS ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', revenue_src_28000.created_at) AS revenue_instance__ds__day + , date_trunc('week', revenue_src_28000.created_at) AS revenue_instance__ds__week + , date_trunc('month', revenue_src_28000.created_at) AS revenue_instance__ds__month + , date_trunc('quarter', revenue_src_28000.created_at) AS revenue_instance__ds__quarter + , date_trunc('year', revenue_src_28000.created_at) AS revenue_instance__ds__year + , toYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_year + , toQuarter(revenue_src_28000.created_at) AS revenue_instance__ds__extract_quarter + , toMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_month + , toDayOfMonth(revenue_src_28000.created_at) AS revenue_instance__ds__extract_day + , toDayOfWeek(revenue_src_28000.created_at) AS revenue_instance__ds__extract_dow + , toDayOfYear(revenue_src_28000.created_at) AS revenue_instance__ds__extract_doy , revenue_src_28000.user_id AS user , revenue_src_28000.user_id AS revenue_instance__user FROM ***************************.fct_revenue revenue_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.user = subq_7.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE user__revenue_all_time > 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql index c85edbbf7f..130b553f96 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql @@ -24,10 +24,8 @@ FROM ( user_id AS user , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read Elements From Semantic Model 'revenue' -- Metric Time Dimension 'ds' -- Pass Only Elements: ['txn_revenue', 'user'] @@ -39,12 +37,9 @@ FROM ( , SUM(revenue) AS user__revenue_all_time FROM ***************************.fct_revenue revenue_src_28000 GROUP BY - user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user ) subq_19 ON subq_13.user = subq_19.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 WHERE user__revenue_all_time > 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql index eb936aab7e..ea1837bf06 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql @@ -233,53 +233,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -287,12 +287,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__views_times_booking_value'] SELECT subq_13.listing @@ -442,73 +439,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -516,20 +513,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.listing @@ -611,86 +602,73 @@ FROM ( -- Read Elements From Semantic Model 'views_source' SELECT 1 AS views - , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS ds__day + , date_trunc('week', views_source_src_28000.ds) AS ds__week + , date_trunc('month', views_source_src_28000.ds) AS ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS ds__year + , toYear(views_source_src_28000.ds) AS ds__extract_year + , toQuarter(views_source_src_28000.ds) AS ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS view__ds__day + , date_trunc('week', views_source_src_28000.ds) AS view__ds__week + , date_trunc('month', views_source_src_28000.ds) AS view__ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS view__ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS view__ds__year + , toYear(views_source_src_28000.ds) AS view__ds__extract_year + , toQuarter(views_source_src_28000.ds) AS view__ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS view__ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS view__ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS view__ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS view__ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy , views_source_src_28000.listing_id AS listing , views_source_src_28000.user_id AS user , views_source_src_28000.listing_id AS view__listing , views_source_src_28000.user_id AS view__user FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_6.listing = subq_11.listing GROUP BY - COALESCE(subq_6.listing, subq_11.listing) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_1.listing = subq_14.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 WHERE listing__views_times_booking_value > 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql index 502489e762..8f12b69771 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql @@ -22,10 +22,8 @@ FROM ( listing_id AS listing , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Compute Metrics via Expressions -- Pass Only Elements: ['listing', 'listing__views_times_booking_value'] SELECT @@ -48,11 +46,9 @@ FROM ( , SUM(booking_value) AS booking_value FROM ***************************.fct_bookings bookings_source_src_28000 GROUP BY - listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_25 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -66,23 +62,17 @@ FROM ( listing_id AS listing , 1 AS views FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 ON subq_25.listing = subq_30.listing GROUP BY - COALESCE(subq_25.listing, subq_30.listing) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_31 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_33 ON subq_20.listing = subq_33.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 WHERE listing__views_times_booking_value > 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql index bababe949f..aa19b45a72 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql @@ -235,53 +235,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -289,12 +289,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookings'] SELECT subq_6.listing @@ -433,73 +430,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -507,24 +504,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.listing = subq_7.listing - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookers'] SELECT subq_12.listing @@ -663,73 +653,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -737,29 +727,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_11 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON subq_1.listing = subq_13.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 WHERE listing__bookings > 2 AND listing__bookers > 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql index 2ecaa53c47..50a6ae3467 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql @@ -16,7 +16,6 @@ WITH sma_28009_cte AS ( , 1 AS bookings , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -34,10 +33,8 @@ FROM ( listing_id AS listing , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookings', 'listing'] -- Aggregate Measures @@ -49,12 +46,10 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 ON subq_19.listing = subq_25.listing - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['bookers', 'listing'] -- Aggregate Measures @@ -66,11 +61,8 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 ON subq_19.listing = subq_30.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 WHERE listing__bookings > 2 AND listing__bookers > 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql index df585b2e9d..da419afd8c 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql @@ -233,53 +233,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -287,12 +287,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookings_per_booker'] SELECT subq_13.listing @@ -442,73 +439,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -516,20 +513,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_10.listing @@ -663,73 +654,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -737,37 +728,24 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 GROUP BY - subq_9.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_6.listing = subq_11.listing GROUP BY - COALESCE(subq_6.listing, subq_11.listing) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_1.listing = subq_14.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 WHERE listing__bookings_per_booker > 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql index 80cfb49fee..0bd7f52db3 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql @@ -22,10 +22,8 @@ FROM ( listing_id AS listing , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -41,15 +39,11 @@ FROM ( , 1 AS bookings , guest_id AS bookers FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 ON subq_20.listing = subq_25.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 WHERE listing__bookings_per_booker > 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql index ab8afd1121..b88b931f2f 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql @@ -233,53 +233,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -287,12 +287,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['listing', 'listing__bookings'] SELECT subq_6.listing @@ -431,73 +428,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -505,29 +502,18 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 GROUP BY - subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_1.listing = subq_7.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE listing__bookings > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql index 58e480e7f8..0de5ec3773 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql @@ -22,10 +22,8 @@ FROM ( listing_id AS listing , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions -- Pass Only Elements: ['listing', 'listing__bookings'] @@ -40,15 +38,11 @@ FROM ( listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 GROUP BY listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 ON subq_13.listing = subq_19.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 WHERE listing__bookings > 2 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql index 33ceaf0847..199f6c01ef 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql @@ -110,73 +110,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -184,6 +184,4 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql index 534903b5bc..2499a74e47 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql @@ -7,83 +7,83 @@ sql_engine: Clickhouse -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'paid_at' SELECT - DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS paid_at__day - , DATE_TRUNC('week', paid_at) AS paid_at__week - , DATE_TRUNC('month', paid_at) AS paid_at__month - , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter - , DATE_TRUNC('year', paid_at) AS paid_at__year - , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy - , DATE_TRUNC('day', ds) AS booking__ds__day - , DATE_TRUNC('week', ds) AS booking__ds__week - , DATE_TRUNC('month', ds) AS booking__ds__month - , DATE_TRUNC('quarter', ds) AS booking__ds__quarter - , DATE_TRUNC('year', ds) AS booking__ds__year - , EXTRACT(toYear FROM ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy - , DATE_TRUNC('day', paid_at) AS metric_time__day - , DATE_TRUNC('week', paid_at) AS metric_time__week - , DATE_TRUNC('month', paid_at) AS metric_time__month - , DATE_TRUNC('quarter', paid_at) AS metric_time__quarter - , DATE_TRUNC('year', paid_at) AS metric_time__year - , EXTRACT(toYear FROM paid_at) AS metric_time__extract_year - , EXTRACT(toQuarter FROM paid_at) AS metric_time__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS metric_time__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS metric_time__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS metric_time__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS metric_time__extract_doy + date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('day', ds_partitioned) AS ds_partitioned__day + , date_trunc('week', ds_partitioned) AS ds_partitioned__week + , date_trunc('month', ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS ds_partitioned__year + , toYear(ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS paid_at__day + , date_trunc('week', paid_at) AS paid_at__week + , date_trunc('month', paid_at) AS paid_at__month + , date_trunc('quarter', paid_at) AS paid_at__quarter + , date_trunc('year', paid_at) AS paid_at__year + , toYear(paid_at) AS paid_at__extract_year + , toQuarter(paid_at) AS paid_at__extract_quarter + , toMonth(paid_at) AS paid_at__extract_month + , toDayOfMonth(paid_at) AS paid_at__extract_day + , toDayOfWeek(paid_at) AS paid_at__extract_dow + , toDayOfYear(paid_at) AS paid_at__extract_doy + , date_trunc('day', ds) AS booking__ds__day + , date_trunc('week', ds) AS booking__ds__week + , date_trunc('month', ds) AS booking__ds__month + , date_trunc('quarter', ds) AS booking__ds__quarter + , date_trunc('year', ds) AS booking__ds__year + , toYear(ds) AS booking__ds__extract_year + , toQuarter(ds) AS booking__ds__extract_quarter + , toMonth(ds) AS booking__ds__extract_month + , toDayOfMonth(ds) AS booking__ds__extract_day + , toDayOfWeek(ds) AS booking__ds__extract_dow + , toDayOfYear(ds) AS booking__ds__extract_doy + , date_trunc('day', ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS booking__ds_partitioned__year + , toYear(ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS booking__paid_at__day + , date_trunc('week', paid_at) AS booking__paid_at__week + , date_trunc('month', paid_at) AS booking__paid_at__month + , date_trunc('quarter', paid_at) AS booking__paid_at__quarter + , date_trunc('year', paid_at) AS booking__paid_at__year + , toYear(paid_at) AS booking__paid_at__extract_year + , toQuarter(paid_at) AS booking__paid_at__extract_quarter + , toMonth(paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', paid_at) AS metric_time__day + , date_trunc('week', paid_at) AS metric_time__week + , date_trunc('month', paid_at) AS metric_time__month + , date_trunc('quarter', paid_at) AS metric_time__quarter + , date_trunc('year', paid_at) AS metric_time__year + , toYear(paid_at) AS metric_time__extract_year + , toQuarter(paid_at) AS metric_time__extract_quarter + , toMonth(paid_at) AS metric_time__extract_month + , toDayOfMonth(paid_at) AS metric_time__extract_day + , toDayOfWeek(paid_at) AS metric_time__extract_dow + , toDayOfYear(paid_at) AS metric_time__extract_doy , listing_id AS listing , guest_id AS guest , host_id AS host @@ -94,4 +94,3 @@ SELECT , is_instant AS booking__is_instant , booking_value AS booking_payments FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql index fdda63bd7b..d839e1cdf0 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql @@ -122,73 +122,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -196,6 +196,4 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql index 0d8dbdf9d4..499c504963 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql @@ -7,83 +7,83 @@ sql_engine: Clickhouse -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('week', ds) AS ds__week - , DATE_TRUNC('month', ds) AS ds__month - , DATE_TRUNC('quarter', ds) AS ds__quarter - , DATE_TRUNC('year', ds) AS ds__year - , EXTRACT(toYear FROM ds) AS ds__extract_year - , EXTRACT(toQuarter FROM ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS paid_at__day - , DATE_TRUNC('week', paid_at) AS paid_at__week - , DATE_TRUNC('month', paid_at) AS paid_at__month - , DATE_TRUNC('quarter', paid_at) AS paid_at__quarter - , DATE_TRUNC('year', paid_at) AS paid_at__year - , EXTRACT(toYear FROM paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS paid_at__extract_doy - , DATE_TRUNC('day', ds) AS booking__ds__day - , DATE_TRUNC('week', ds) AS booking__ds__week - , DATE_TRUNC('month', ds) AS booking__ds__month - , DATE_TRUNC('quarter', ds) AS booking__ds__quarter - , DATE_TRUNC('year', ds) AS booking__ds__year - , EXTRACT(toYear FROM ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM paid_at) AS booking__paid_at__extract_doy - , DATE_TRUNC('day', ds) AS metric_time__day - , DATE_TRUNC('week', ds) AS metric_time__week - , DATE_TRUNC('month', ds) AS metric_time__month - , DATE_TRUNC('quarter', ds) AS metric_time__quarter - , DATE_TRUNC('year', ds) AS metric_time__year - , EXTRACT(toYear FROM ds) AS metric_time__extract_year - , EXTRACT(toQuarter FROM ds) AS metric_time__extract_quarter - , EXTRACT(toMonth FROM ds) AS metric_time__extract_month - , EXTRACT(toDayOfMonth FROM ds) AS metric_time__extract_day - , EXTRACT(toDayOfWeek FROM ds) AS metric_time__extract_dow - , EXTRACT(toDayOfYear FROM ds) AS metric_time__extract_doy + date_trunc('day', ds) AS ds__day + , date_trunc('week', ds) AS ds__week + , date_trunc('month', ds) AS ds__month + , date_trunc('quarter', ds) AS ds__quarter + , date_trunc('year', ds) AS ds__year + , toYear(ds) AS ds__extract_year + , toQuarter(ds) AS ds__extract_quarter + , toMonth(ds) AS ds__extract_month + , toDayOfMonth(ds) AS ds__extract_day + , toDayOfWeek(ds) AS ds__extract_dow + , toDayOfYear(ds) AS ds__extract_doy + , date_trunc('day', ds_partitioned) AS ds_partitioned__day + , date_trunc('week', ds_partitioned) AS ds_partitioned__week + , date_trunc('month', ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS ds_partitioned__year + , toYear(ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS paid_at__day + , date_trunc('week', paid_at) AS paid_at__week + , date_trunc('month', paid_at) AS paid_at__month + , date_trunc('quarter', paid_at) AS paid_at__quarter + , date_trunc('year', paid_at) AS paid_at__year + , toYear(paid_at) AS paid_at__extract_year + , toQuarter(paid_at) AS paid_at__extract_quarter + , toMonth(paid_at) AS paid_at__extract_month + , toDayOfMonth(paid_at) AS paid_at__extract_day + , toDayOfWeek(paid_at) AS paid_at__extract_dow + , toDayOfYear(paid_at) AS paid_at__extract_doy + , date_trunc('day', ds) AS booking__ds__day + , date_trunc('week', ds) AS booking__ds__week + , date_trunc('month', ds) AS booking__ds__month + , date_trunc('quarter', ds) AS booking__ds__quarter + , date_trunc('year', ds) AS booking__ds__year + , toYear(ds) AS booking__ds__extract_year + , toQuarter(ds) AS booking__ds__extract_quarter + , toMonth(ds) AS booking__ds__extract_month + , toDayOfMonth(ds) AS booking__ds__extract_day + , toDayOfWeek(ds) AS booking__ds__extract_dow + , toDayOfYear(ds) AS booking__ds__extract_doy + , date_trunc('day', ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', ds_partitioned) AS booking__ds_partitioned__year + , toYear(ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', paid_at) AS booking__paid_at__day + , date_trunc('week', paid_at) AS booking__paid_at__week + , date_trunc('month', paid_at) AS booking__paid_at__month + , date_trunc('quarter', paid_at) AS booking__paid_at__quarter + , date_trunc('year', paid_at) AS booking__paid_at__year + , toYear(paid_at) AS booking__paid_at__extract_year + , toQuarter(paid_at) AS booking__paid_at__extract_quarter + , toMonth(paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', ds) AS metric_time__day + , date_trunc('week', ds) AS metric_time__week + , date_trunc('month', ds) AS metric_time__month + , date_trunc('quarter', ds) AS metric_time__quarter + , date_trunc('year', ds) AS metric_time__year + , toYear(ds) AS metric_time__extract_year + , toQuarter(ds) AS metric_time__extract_quarter + , toMonth(ds) AS metric_time__extract_month + , toDayOfMonth(ds) AS metric_time__extract_day + , toDayOfWeek(ds) AS metric_time__extract_dow + , toDayOfYear(ds) AS metric_time__extract_doy , listing_id AS listing , guest_id AS guest , host_id AS host @@ -106,4 +106,3 @@ SELECT , booking_value AS approximate_continuous_booking_value_p99 , booking_value AS approximate_discrete_booking_value_p99 FROM ***************************.fct_bookings bookings_source_src_28000 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql index 35e78a2edf..7a3dc33aa9 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0.sql @@ -143,73 +143,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -217,20 +217,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -352,73 +346,73 @@ FULL OUTER JOIN , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -426,20 +420,14 @@ FULL OUTER JOIN , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_4.metric_time__day = subq_9.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql index 24f43109f4..dbde8aa1c9 100644 --- a/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlPlan/Clickhouse/test_simple_query_with_metric_time_dimension__plan0_optimized.sql @@ -10,10 +10,9 @@ WITH rss_28020_cte AS ( SELECT 1 AS bookings , booking_value AS booking_payments - , DATE_TRUNC('day', ds) AS ds__day - , DATE_TRUNC('day', paid_at) AS paid_at__day + , date_trunc('day', ds) AS ds__day + , date_trunc('day', paid_at) AS paid_at__day FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -31,11 +30,9 @@ FROM ( , SUM(bookings) AS bookings FROM rss_28020_cte rss_28020_cte GROUP BY - ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_14 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Read From CTE For node_id=rss_28020 -- Metric Time Dimension 'paid_at' -- Pass Only Elements: ['booking_payments', 'metric_time__day'] @@ -46,11 +43,9 @@ FULL OUTER JOIN , SUM(booking_payments) AS booking_payments FROM rss_28020_cte rss_28020_cte GROUP BY - paid_at__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_19 ON subq_14.metric_time__day = subq_19.metric_time__day GROUP BY - COALESCE(subq_14.metric_time__day, subq_19.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql index a46f5579c5..0cf1ea7aef 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql @@ -135,53 +135,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -189,10 +189,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - CROSS JOIN - ( + CROSS JOIN ( -- Pass Only Elements: ['metric_time__day',] SELECT subq_2.metric_time__day @@ -227,26 +225,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_4.user @@ -254,45 +248,40 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 ON subq_0.user = subq_5.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE subq_6.metric_time__day BETWEEN '2020-01-01' AND '2020-01-03' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - , subq_7.listing__is_lux_latest - , subq_7.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql index 7cca6f0519..f3069ff28a 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql @@ -18,7 +18,6 @@ ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id WHERE time_spine_src_28006.ds BETWEEN '2020-01-01' AND '2020-01-03' GROUP BY - time_spine_src_28006.ds - , listings_latest_src_28000.is_lux - , users_latest_src_28000.home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql index 6cab947fc8..bb284131e9 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0.sql @@ -38,22 +38,19 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql index 954cf4082c..3e0cddc3a1 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_only__plan0_optimized.sql @@ -11,5 +11,4 @@ SELECT ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - ds -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql index 85b3dd1f35..ab9716be2d 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0.sql @@ -36,22 +36,19 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.metric_time__quarter -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql index 996d5749e8..9bd3978155 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_quarter_alone__plan0_optimized.sql @@ -6,8 +6,7 @@ sql_engine: Clickhouse -- Metric Time Dimension 'ds' -- Pass Only Elements: ['metric_time__quarter',] SELECT - DATE_TRUNC('quarter', ds) AS metric_time__quarter + date_trunc('quarter', ds) AS metric_time__quarter FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - DATE_TRUNC('quarter', ds) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__quarter diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql index 1e1432232d..46888c7819 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0.sql @@ -74,53 +74,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -128,10 +128,8 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - CROSS JOIN - ( + CROSS JOIN ( -- Pass Only Elements: ['metric_time__day',] SELECT subq_2.metric_time__day @@ -166,26 +164,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_4.user @@ -193,42 +187,38 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 ON subq_0.user = subq_5.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - , subq_6.listing__is_lux_latest - , subq_6.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql index 1d41f35c08..b1baf97a1c 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_metric_time_with_other_dimensions__plan0_optimized.sql @@ -16,7 +16,6 @@ FULL OUTER JOIN ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id GROUP BY - time_spine_src_28006.ds - , listings_latest_src_28000.is_lux - , users_latest_src_28000.home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__is_lux_latest + , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql index d42ccf4e69..814f00b0ad 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql @@ -167,41 +167,38 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_2.user @@ -209,52 +206,45 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.user = subq_3.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 WHERE visit__referrer_id = '123456' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - , subq_6.user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , user__home_state_latest ) subq_7 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Aggregate Measures SELECT subq_20.metric_time__day @@ -467,41 +457,38 @@ FROM ( SELECT 1 AS visits , visits_source_src_28000.user_id AS visitors - , DATE_TRUNC('day', visits_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS ds__day + , date_trunc('week', visits_source_src_28000.ds) AS ds__week + , date_trunc('month', visits_source_src_28000.ds) AS ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS ds__year + , toYear(visits_source_src_28000.ds) AS ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS ds__extract_doy , visits_source_src_28000.referrer_id - , DATE_TRUNC('day', visits_source_src_28000.ds) AS visit__ds__day - , DATE_TRUNC('week', visits_source_src_28000.ds) AS visit__ds__week - , DATE_TRUNC('month', visits_source_src_28000.ds) AS visit__ds__month - , DATE_TRUNC('quarter', visits_source_src_28000.ds) AS visit__ds__quarter - , DATE_TRUNC('year', visits_source_src_28000.ds) AS visit__ds__year - , EXTRACT(toYear FROM visits_source_src_28000.ds) AS visit__ds__extract_year - , EXTRACT(toQuarter FROM visits_source_src_28000.ds) AS visit__ds__extract_quarter - , EXTRACT(toMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_month - , EXTRACT(toDayOfMonth FROM visits_source_src_28000.ds) AS visit__ds__extract_day - , EXTRACT(toDayOfWeek FROM visits_source_src_28000.ds) AS visit__ds__extract_dow - , EXTRACT(toDayOfYear FROM visits_source_src_28000.ds) AS visit__ds__extract_doy + , date_trunc('day', visits_source_src_28000.ds) AS visit__ds__day + , date_trunc('week', visits_source_src_28000.ds) AS visit__ds__week + , date_trunc('month', visits_source_src_28000.ds) AS visit__ds__month + , date_trunc('quarter', visits_source_src_28000.ds) AS visit__ds__quarter + , date_trunc('year', visits_source_src_28000.ds) AS visit__ds__year + , toYear(visits_source_src_28000.ds) AS visit__ds__extract_year + , toQuarter(visits_source_src_28000.ds) AS visit__ds__extract_quarter + , toMonth(visits_source_src_28000.ds) AS visit__ds__extract_month + , toDayOfMonth(visits_source_src_28000.ds) AS visit__ds__extract_day + , toDayOfWeek(visits_source_src_28000.ds) AS visit__ds__extract_dow + , toDayOfYear(visits_source_src_28000.ds) AS visit__ds__extract_doy , visits_source_src_28000.referrer_id AS visit__referrer_id , visits_source_src_28000.user_id AS user , visits_source_src_28000.session_id AS session , visits_source_src_28000.user_id AS visit__user , visits_source_src_28000.session_id AS visit__session FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_10.user @@ -509,47 +496,41 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON subq_9.user = subq_11.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 WHERE visit__referrer_id = '123456' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - CROSS JOIN - ( + INNER JOIN ( -- Add column with generated UUID SELECT subq_16.ds__day @@ -664,61 +645,64 @@ FROM ( 1 AS buys , 1 AS buys_month , buys_source_src_28000.user_id AS buyers - , DATE_TRUNC('day', buys_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS ds_month__extract_month - , DATE_TRUNC('day', buys_source_src_28000.ds) AS buy__ds__day - , DATE_TRUNC('week', buys_source_src_28000.ds) AS buy__ds__week - , DATE_TRUNC('month', buys_source_src_28000.ds) AS buy__ds__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds) AS buy__ds__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds) AS buy__ds__year - , EXTRACT(toYear FROM buys_source_src_28000.ds) AS buy__ds__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds) AS buy__ds__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_month - , EXTRACT(toDayOfMonth FROM buys_source_src_28000.ds) AS buy__ds__extract_day - , EXTRACT(toDayOfWeek FROM buys_source_src_28000.ds) AS buy__ds__extract_dow - , EXTRACT(toDayOfYear FROM buys_source_src_28000.ds) AS buy__ds__extract_doy - , DATE_TRUNC('month', buys_source_src_28000.ds_month) AS buy__ds_month__month - , DATE_TRUNC('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter - , DATE_TRUNC('year', buys_source_src_28000.ds_month) AS buy__ds_month__year - , EXTRACT(toYear FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_year - , EXTRACT(toQuarter FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter - , EXTRACT(toMonth FROM buys_source_src_28000.ds_month) AS buy__ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS ds__day + , date_trunc('week', buys_source_src_28000.ds) AS ds__week + , date_trunc('month', buys_source_src_28000.ds) AS ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS ds__year + , toYear(buys_source_src_28000.ds) AS ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS ds_month__year + , toYear(buys_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', buys_source_src_28000.ds) AS buy__ds__day + , date_trunc('week', buys_source_src_28000.ds) AS buy__ds__week + , date_trunc('month', buys_source_src_28000.ds) AS buy__ds__month + , date_trunc('quarter', buys_source_src_28000.ds) AS buy__ds__quarter + , date_trunc('year', buys_source_src_28000.ds) AS buy__ds__year + , toYear(buys_source_src_28000.ds) AS buy__ds__extract_year + , toQuarter(buys_source_src_28000.ds) AS buy__ds__extract_quarter + , toMonth(buys_source_src_28000.ds) AS buy__ds__extract_month + , toDayOfMonth(buys_source_src_28000.ds) AS buy__ds__extract_day + , toDayOfWeek(buys_source_src_28000.ds) AS buy__ds__extract_dow + , toDayOfYear(buys_source_src_28000.ds) AS buy__ds__extract_doy + , date_trunc('month', buys_source_src_28000.ds_month) AS buy__ds_month__month + , date_trunc('quarter', buys_source_src_28000.ds_month) AS buy__ds_month__quarter + , date_trunc('year', buys_source_src_28000.ds_month) AS buy__ds_month__year + , toYear(buys_source_src_28000.ds_month) AS buy__ds_month__extract_year + , toQuarter(buys_source_src_28000.ds_month) AS buy__ds_month__extract_quarter + , toMonth(buys_source_src_28000.ds_month) AS buy__ds_month__extract_month , buys_source_src_28000.user_id AS user , buys_source_src_28000.session_id , buys_source_src_28000.user_id AS buy__user , buys_source_src_28000.session_id AS buy__session_id FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_14.user = subq_17.user + ) AND ( + ( + subq_14.metric_time__day <= subq_17.metric_time__day + ) AND ( + subq_14.metric_time__day > DATEADD(day, -7, subq_17.metric_time__day) + ) + ) ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 GROUP BY - subq_20.metric_time__day - , subq_20.user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , user__home_state_latest ) subq_21 ON ( @@ -727,8 +711,6 @@ FROM ( subq_7.metric_time__day = subq_21.metric_time__day ) GROUP BY - COALESCE(subq_7.metric_time__day, subq_21.metric_time__day) - , COALESCE(subq_7.user__home_state_latest, subq_21.user__home_state_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , user__home_state_latest ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql index a115ab1521..f6cde35f58 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql @@ -9,12 +9,11 @@ WITH sma_28019_cte AS ( -- Read Elements From Semantic Model 'visits_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28028_cte AS ( @@ -23,7 +22,6 @@ WITH sma_28019_cte AS ( home_state_latest , user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -57,16 +55,13 @@ FROM ( rss_28028_cte rss_28028_cte ON sma_28019_cte.user = rss_28028_cte.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 WHERE visit__referrer_id = '123456' GROUP BY metric_time__day , user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Find conversions for user within the range of 7 day -- Pass Only Elements: ['buys', 'user__home_state_latest', 'metric_time__day'] -- Aggregate Measures @@ -141,30 +136,34 @@ FROM ( rss_28028_cte rss_28028_cte ON sma_28019_cte.user = rss_28028_cte.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 WHERE visit__referrer_id = '123456' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_36 - CROSS JOIN - ( + INNER JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , user_id AS user , 1 AS buys , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_39 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_36.user = subq_39.user + ) AND ( + ( + subq_36.metric_time__day <= subq_39.metric_time__day + ) AND ( + subq_36.metric_time__day > DATEADD(day, -7, subq_39.metric_time__day) + ) + ) ) subq_40 GROUP BY metric_time__day , user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_43 ON ( @@ -173,8 +172,6 @@ FROM ( subq_30.metric_time__day = subq_43.metric_time__day ) GROUP BY - COALESCE(subq_30.metric_time__day, subq_43.metric_time__day) - , COALESCE(subq_30.user__home_state_latest, subq_43.user__home_state_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , user__home_state_latest ) subq_44 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql index 5044a1989f..60b3579f71 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql @@ -333,10 +333,8 @@ FROM ( SELECT subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - CROSS JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -455,73 +453,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -529,14 +527,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + ) ) subq_4 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_6.listing @@ -617,53 +617,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -671,24 +671,16 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 ON subq_4.listing = subq_7.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.metric_time__day - , subq_10.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql index fc5b3b0983..ee3d7a2b82 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql @@ -29,18 +29,21 @@ FROM ( , bookings_source_src_28000.is_instant AS booking__is_instant , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_15 - CROSS JOIN + INNER JOIN ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) + ) ) subq_16 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_16.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 WHERE booking__is_instant GROUP BY metric_time__day , listing__country_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql index 57c027c251..428c792ba5 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql @@ -257,73 +257,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -331,23 +331,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_9.metric_time__day @@ -481,73 +474,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -555,22 +548,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON subq_5.metric_time__day = subq_10.metric_time__day GROUP BY - COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql index 45bc6e2082..8b4f7a81b6 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql @@ -17,12 +17,11 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , booking_value AS max_booking_value , booking_value AS average_booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -50,15 +49,12 @@ FROM ( , max_booking_value , average_booking_value FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 WHERE booking__is_instant GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['max_booking_value', 'metric_time__day'] -- Aggregate Measures @@ -69,12 +65,9 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON subq_17.metric_time__day = subq_21.metric_time__day GROUP BY - COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql index 5ed7ff55ba..b5abfe477c 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql @@ -53,26 +53,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_7.metric_time__day @@ -407,73 +403,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -481,12 +477,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -567,53 +560,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -621,34 +614,24 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - , subq_7.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_8 ON subq_11.metric_time__day = subq_8.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_30.metric_time__day @@ -683,26 +666,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_28 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_25.metric_time__day @@ -1042,26 +1021,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_14.ds__day @@ -1180,73 +1155,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -1254,16 +1229,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON - addDays(subq_18.metric_time__day, CAST(-14 AS Integer)) = subq_15.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_18.metric_time__day) = subq_15.metric_time__day ) subq_19 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_21.listing @@ -1344,53 +1315,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -1398,31 +1369,22 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 ON subq_19.listing = subq_22.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 GROUP BY - subq_25.metric_time__day - , subq_25.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_26 ON subq_29.metric_time__day = subq_26.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 ON ( @@ -1431,8 +1393,6 @@ FROM ( subq_13.metric_time__day = subq_31.metric_time__day ) GROUP BY - COALESCE(subq_13.metric_time__day, subq_31.metric_time__day) - , COALESCE(subq_13.listing__country_latest, subq_31.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_32 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql index 9ec32ee662..e21cbf4ca4 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql @@ -11,12 +11,11 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , sma_28014_cte AS ( @@ -26,7 +25,6 @@ WITH sma_28009_cte AS ( listing_id AS listing , country AS country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , rss_28018_cte AS ( @@ -34,7 +32,6 @@ WITH sma_28009_cte AS ( SELECT ds AS ds__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -61,8 +58,7 @@ FROM ( , subq_41.listing__country_latest AS listing__country_latest , subq_41.bookings AS bookings FROM rss_28018_cte rss_28018_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] -- Aggregate Measures @@ -82,22 +78,17 @@ FROM ( sma_28014_cte sma_28014_cte ON sma_28009_cte.listing = sma_28014_cte.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_38 WHERE booking__is_instant GROUP BY metric_time__day , listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_41 ON rss_28018_cte.ds__day = subq_41.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_45 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_46 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT metric_time__day @@ -110,8 +101,7 @@ FROM ( , subq_57.listing__country_latest AS listing__country_latest , subq_57.bookings AS bookings FROM rss_28018_cte rss_28018_cte - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] -- Aggregate Measures @@ -137,26 +127,21 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(rss_28018_cte.ds__day, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day ) subq_51 LEFT OUTER JOIN sma_28014_cte sma_28014_cte ON subq_51.listing = sma_28014_cte.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_54 WHERE booking__is_instant GROUP BY metric_time__day , listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_57 ON rss_28018_cte.ds__day = subq_57.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_61 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_62 ON ( @@ -165,8 +150,6 @@ FROM ( subq_46.metric_time__day = subq_62.metric_time__day ) GROUP BY - COALESCE(subq_46.metric_time__day, subq_62.metric_time__day) - , COALESCE(subq_46.listing__country_latest, subq_62.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_63 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql index 3823714fff..afe5a0e232 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql @@ -344,73 +344,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -418,12 +418,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -504,53 +501,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -558,23 +555,15 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE metric_time__day = '2024-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql index 8f56b60d94..3392683297 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql @@ -24,19 +24,16 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_10.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 WHERE metric_time__day = '2024-01-01' GROUP BY listing__country_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql index b1a2b88393..2f9a63a4e6 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql @@ -236,53 +236,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -290,12 +290,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['home_state_latest', 'user'] SELECT subq_2.user @@ -303,47 +300,40 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_28000.ds) AS ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS ds_latest__extract_doy + date_trunc('day', users_latest_src_28000.ds) AS ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS ds_latest__year + , toYear(users_latest_src_28000.ds) AS ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS ds_latest__extract_doy , users_latest_src_28000.home_state_latest - , DATE_TRUNC('day', users_latest_src_28000.ds) AS user__ds_latest__day - , DATE_TRUNC('week', users_latest_src_28000.ds) AS user__ds_latest__week - , DATE_TRUNC('month', users_latest_src_28000.ds) AS user__ds_latest__month - , DATE_TRUNC('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter - , DATE_TRUNC('year', users_latest_src_28000.ds) AS user__ds_latest__year - , EXTRACT(toYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_year - , EXTRACT(toQuarter FROM users_latest_src_28000.ds) AS user__ds_latest__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_28000.ds) AS user__ds_latest__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_28000.ds) AS user__ds_latest__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_28000.ds) AS user__ds_latest__extract_doy + , date_trunc('day', users_latest_src_28000.ds) AS user__ds_latest__day + , date_trunc('week', users_latest_src_28000.ds) AS user__ds_latest__week + , date_trunc('month', users_latest_src_28000.ds) AS user__ds_latest__month + , date_trunc('quarter', users_latest_src_28000.ds) AS user__ds_latest__quarter + , date_trunc('year', users_latest_src_28000.ds) AS user__ds_latest__year + , toYear(users_latest_src_28000.ds) AS user__ds_latest__extract_year + , toQuarter(users_latest_src_28000.ds) AS user__ds_latest__extract_quarter + , toMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_month + , toDayOfMonth(users_latest_src_28000.ds) AS user__ds_latest__extract_day + , toDayOfWeek(users_latest_src_28000.ds) AS user__ds_latest__extract_dow + , toDayOfYear(users_latest_src_28000.ds) AS user__ds_latest__extract_doy , users_latest_src_28000.home_state_latest AS user__home_state_latest , users_latest_src_28000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.user = subq_3.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 WHERE listing__is_lux_latest OR listing__capacity_latest > 4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__home_state_latest ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql index e1b95e4c8b..831a44bc28 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql @@ -27,15 +27,12 @@ FROM ( , capacity AS listing__capacity_latest , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 LEFT OUTER JOIN ***************************.dim_users_latest users_latest_src_28000 ON subq_9.user = users_latest_src_28000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 WHERE listing__is_lux_latest OR listing__capacity_latest > 4 GROUP BY user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql index 436e52d51a..ac7a9f3f97 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql @@ -359,73 +359,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -433,12 +433,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -519,53 +516,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -573,30 +570,21 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - , subq_7.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_22.metric_time__day @@ -942,26 +930,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 - INNER JOIN - ( + INNER JOIN ( -- Metric Time Dimension 'ds' SELECT subq_10.ds__day @@ -1080,73 +1064,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -1154,16 +1138,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON - addDays(subq_14.metric_time__day, CAST(-14 AS Integer)) = subq_11.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, subq_14.metric_time__day) = subq_11.metric_time__day ) subq_15 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_17.listing @@ -1244,53 +1224,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -1298,27 +1278,19 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 ON subq_15.listing = subq_18.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 GROUP BY - subq_21.metric_time__day - , subq_21.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_22 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 ON ( @@ -1327,8 +1299,6 @@ FROM ( subq_9.metric_time__day = subq_23.metric_time__day ) GROUP BY - COALESCE(subq_9.metric_time__day, subq_23.metric_time__day) - , COALESCE(subq_9.listing__country_latest, subq_23.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_24 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql index 988bec799c..d7c65db337 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql @@ -11,12 +11,11 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , sma_28014_cte AS ( @@ -26,7 +25,6 @@ WITH sma_28009_cte AS ( listing_id AS listing , country AS country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -61,16 +59,13 @@ FROM ( sma_28014_cte sma_28014_cte ON sma_28009_cte.listing = sma_28014_cte.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 WHERE booking__is_instant GROUP BY metric_time__day , listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'listing__country_latest', 'metric_time__day'] -- Aggregate Measures @@ -97,20 +92,17 @@ FROM ( INNER JOIN sma_28009_cte sma_28009_cte ON - addDays(time_spine_src_28006.ds, CAST(-14 AS Integer)) = sma_28009_cte.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day ) subq_39 LEFT OUTER JOIN sma_28014_cte sma_28014_cte ON subq_39.listing = sma_28014_cte.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_42 WHERE booking__is_instant GROUP BY metric_time__day , listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_46 ON ( @@ -119,8 +111,6 @@ FROM ( subq_34.metric_time__day = subq_46.metric_time__day ) GROUP BY - COALESCE(subq_34.metric_time__day, subq_46.metric_time__day) - , COALESCE(subq_34.listing__country_latest, subq_46.listing__country_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__country_latest ) subq_47 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql index 5db981e58c..051833b1a5 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql @@ -352,73 +352,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -426,12 +426,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] SELECT subq_3.listing @@ -513,53 +510,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -567,29 +564,20 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_18.listing__capacity_latest @@ -801,61 +789,58 @@ FULL OUTER JOIN -- Read Elements From Semantic Model 'views_source' SELECT 1 AS views - , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS ds__day + , date_trunc('week', views_source_src_28000.ds) AS ds__week + , date_trunc('month', views_source_src_28000.ds) AS ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS ds__year + , toYear(views_source_src_28000.ds) AS ds__extract_year + , toQuarter(views_source_src_28000.ds) AS ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS view__ds__day + , date_trunc('week', views_source_src_28000.ds) AS view__ds__week + , date_trunc('month', views_source_src_28000.ds) AS view__ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS view__ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS view__ds__year + , toYear(views_source_src_28000.ds) AS view__ds__extract_year + , toQuarter(views_source_src_28000.ds) AS view__ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS view__ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS view__ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS view__ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS view__ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy , views_source_src_28000.listing_id AS listing , views_source_src_28000.user_id AS user , views_source_src_28000.listing_id AS view__listing , views_source_src_28000.user_id AS view__user FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] SELECT subq_13.listing @@ -937,53 +922,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -991,31 +976,22 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_11.listing = subq_14.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY - subq_17.listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 ON subq_9.listing__capacity_latest = subq_19.listing__capacity_latest -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_40.listing__capacity_latest @@ -1366,73 +1342,73 @@ FULL OUTER JOIN , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -1440,12 +1416,9 @@ FULL OUTER JOIN , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] SELECT subq_23.listing @@ -1527,53 +1500,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -1581,29 +1554,20 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 ON subq_21.listing = subq_24.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_25 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_26 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 GROUP BY - subq_27.listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_28 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_29 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_38.listing__capacity_latest @@ -1815,61 +1779,58 @@ FULL OUTER JOIN -- Read Elements From Semantic Model 'views_source' SELECT 1 AS views - , DATE_TRUNC('day', views_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds) AS view__ds__day - , DATE_TRUNC('week', views_source_src_28000.ds) AS view__ds__week - , DATE_TRUNC('month', views_source_src_28000.ds) AS view__ds__month - , DATE_TRUNC('quarter', views_source_src_28000.ds) AS view__ds__quarter - , DATE_TRUNC('year', views_source_src_28000.ds) AS view__ds__year - , EXTRACT(toYear FROM views_source_src_28000.ds) AS view__ds__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds) AS view__ds__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds) AS view__ds__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds) AS view__ds__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds) AS view__ds__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds) AS view__ds__extract_doy - , DATE_TRUNC('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day - , DATE_TRUNC('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week - , DATE_TRUNC('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month - , DATE_TRUNC('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter - , DATE_TRUNC('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year - , EXTRACT(toYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS ds__day + , date_trunc('week', views_source_src_28000.ds) AS ds__week + , date_trunc('month', views_source_src_28000.ds) AS ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS ds__year + , toYear(views_source_src_28000.ds) AS ds__extract_year + , toQuarter(views_source_src_28000.ds) AS ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', views_source_src_28000.ds) AS view__ds__day + , date_trunc('week', views_source_src_28000.ds) AS view__ds__week + , date_trunc('month', views_source_src_28000.ds) AS view__ds__month + , date_trunc('quarter', views_source_src_28000.ds) AS view__ds__quarter + , date_trunc('year', views_source_src_28000.ds) AS view__ds__year + , toYear(views_source_src_28000.ds) AS view__ds__extract_year + , toQuarter(views_source_src_28000.ds) AS view__ds__extract_quarter + , toMonth(views_source_src_28000.ds) AS view__ds__extract_month + , toDayOfMonth(views_source_src_28000.ds) AS view__ds__extract_day + , toDayOfWeek(views_source_src_28000.ds) AS view__ds__extract_dow + , toDayOfYear(views_source_src_28000.ds) AS view__ds__extract_doy + , date_trunc('day', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__day + , date_trunc('week', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__week + , date_trunc('month', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__month + , date_trunc('quarter', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__quarter + , date_trunc('year', views_source_src_28000.ds_partitioned) AS view__ds_partitioned__year + , toYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_year + , toQuarter(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_quarter + , toMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_month + , toDayOfMonth(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_day + , toDayOfWeek(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_dow + , toDayOfYear(views_source_src_28000.ds_partitioned) AS view__ds_partitioned__extract_doy , views_source_src_28000.listing_id AS listing , views_source_src_28000.user_id AS user , views_source_src_28000.listing_id AS view__listing , views_source_src_28000.user_id AS view__user FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_30 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['capacity_latest', 'is_lux_latest', 'listing'] SELECT subq_33.listing @@ -1951,53 +1912,53 @@ FULL OUTER JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -2005,37 +1966,26 @@ FULL OUTER JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_32 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_33 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_34 ON subq_31.listing = subq_34.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_35 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_36 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_37 GROUP BY - subq_37.listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_38 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_39 ON subq_29.listing__capacity_latest = subq_39.listing__capacity_latest GROUP BY - COALESCE(subq_29.listing__capacity_latest, subq_39.listing__capacity_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_40 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_41 ON COALESCE(subq_9.listing__capacity_latest, subq_19.listing__capacity_latest) = subq_41.listing__capacity_latest GROUP BY - COALESCE(subq_9.listing__capacity_latest, subq_19.listing__capacity_latest, subq_41.listing__capacity_latest) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql index 453473eb19..8e572fc9c2 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql @@ -26,22 +26,19 @@ WITH cm_6_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_43 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_43.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_47 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') GROUP BY listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) , cm_7_cte AS ( @@ -63,22 +60,19 @@ WITH cm_6_cte AS ( -- Read Elements From Semantic Model 'views_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS views FROM ***************************.fct_views views_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_53 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_53.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_57 WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') GROUP BY listing__capacity_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -91,8 +85,7 @@ FULL OUTER JOIN cm_7_cte cm_7_cte ON cm_6_cte.listing__capacity_latest = cm_7_cte.listing__capacity_latest -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Combine Aggregated Outputs SELECT COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) AS listing__capacity_latest @@ -104,11 +97,9 @@ FULL OUTER JOIN ON cm_6_cte.listing__capacity_latest = cm_7_cte.listing__capacity_latest GROUP BY - COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest ) subq_64 ON COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest) = subq_64.listing__capacity_latest GROUP BY - COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest, subq_64.listing__capacity_latest) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__capacity_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql index 3d18a9add8..2ea811c16b 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql @@ -46,26 +46,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -297,73 +293,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -371,25 +367,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - , subq_3.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , booking__is_instant ) subq_4 ON subq_7.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql index f176aceed9..c96dd71552 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql @@ -19,8 +19,7 @@ FROM ( , subq_14.booking__is_instant AS booking__is_instant , subq_14.bookings AS bookings FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] -- Aggregate Measures @@ -32,21 +31,17 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE booking__is_instant GROUP BY metric_time__day , booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON time_spine_src_28006.ds = subq_14.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE booking__is_instant -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql index 0445dc57b6..908521a167 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql @@ -341,73 +341,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -415,12 +415,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -501,53 +498,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -555,23 +552,15 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql index 91752462a0..c5a9317242 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql @@ -25,15 +25,12 @@ FROM ( , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_10.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 WHERE booking__is_instant GROUP BY listing__country_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql index 81e01ab3f9..198391f497 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql @@ -348,73 +348,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -422,12 +422,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'is_lux_latest', 'listing'] SELECT subq_3.listing @@ -509,53 +506,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -563,23 +560,15 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE booking__is_instant OR listing__is_lux_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql index 62bdca4439..411418011b 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql @@ -31,15 +31,12 @@ FROM ( , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_10.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 WHERE booking__is_instant OR listing__is_lux_latest GROUP BY listing__country_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql index dc8ba73d6b..789653082f 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0.sql @@ -141,73 +141,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -215,20 +215,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_8.metric_time__day @@ -362,73 +356,73 @@ FULL OUTER JOIN , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -436,20 +430,14 @@ FULL OUTER JOIN , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_4.metric_time__day = subq_9.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql index 412e71c60d..e3261256b0 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_common_semantic_model__plan0_optimized.sql @@ -13,12 +13,10 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'booking_value', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings , booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql index 193fd5d477..0e05a9698b 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql @@ -76,53 +76,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -130,15 +130,11 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 WHERE listing__country_latest = 'us' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_2 ORDER BY subq_2.listing__country_latest DESC LIMIT 100 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql index 29ace5bb1c..89489bca2a 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql @@ -14,11 +14,9 @@ FROM ( SELECT country AS listing__country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 WHERE listing__country_latest = 'us' GROUP BY listing__country_latest ORDER BY listing__country_latest DESC LIMIT 100 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql index 2476a60b81..5eb0858513 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql @@ -341,73 +341,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -415,12 +415,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] SELECT subq_3.listing @@ -501,53 +498,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -555,23 +552,15 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE listing__country_latest = 'us' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__is_instant ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql index 8302452422..46c65299b1 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql @@ -25,15 +25,12 @@ FROM ( , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_10.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 WHERE listing__country_latest = 'us' GROUP BY booking__is_instant -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql index c235d7e58e..6570998d76 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql @@ -319,73 +319,73 @@ FROM ( , bookings_source_src_26000.booking_value AS average_booking_value , bookings_source_src_26000.booking_value AS booking_payments , bookings_source_src_26000.is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS ds__year + , toYear(bookings_source_src_26000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS paid_at__extract_doy , bookings_source_src_26000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS booking__ds__year + , toYear(bookings_source_src_26000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_26000.listing_id AS listing , bookings_source_src_26000.guest_id AS guest , bookings_source_src_26000.host_id AS host @@ -395,12 +395,9 @@ FROM ( , bookings_source_src_26000.host_id AS booking__host , bookings_source_src_26000.guest_id AS booking__user FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - CROSS JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] SELECT subq_2.window_start__day @@ -411,52 +408,52 @@ FROM ( -- Read Elements From Semantic Model 'listings' SELECT listings_src_26000.active_from AS window_start__day - , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week - , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month - , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter - , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year - , EXTRACT(toYear FROM listings_src_26000.active_from) AS window_start__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS window_start__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_from) AS window_start__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS window_start__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS window_start__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS window_start__extract_doy + , date_trunc('week', listings_src_26000.active_from) AS window_start__week + , date_trunc('month', listings_src_26000.active_from) AS window_start__month + , date_trunc('quarter', listings_src_26000.active_from) AS window_start__quarter + , date_trunc('year', listings_src_26000.active_from) AS window_start__year + , toYear(listings_src_26000.active_from) AS window_start__extract_year + , toQuarter(listings_src_26000.active_from) AS window_start__extract_quarter + , toMonth(listings_src_26000.active_from) AS window_start__extract_month + , toDayOfMonth(listings_src_26000.active_from) AS window_start__extract_day + , toDayOfWeek(listings_src_26000.active_from) AS window_start__extract_dow + , toDayOfYear(listings_src_26000.active_from) AS window_start__extract_doy , listings_src_26000.active_to AS window_end__day - , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week - , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month - , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter - , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year - , EXTRACT(toYear FROM listings_src_26000.active_to) AS window_end__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS window_end__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_to) AS window_end__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS window_end__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS window_end__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS window_end__extract_doy + , date_trunc('week', listings_src_26000.active_to) AS window_end__week + , date_trunc('month', listings_src_26000.active_to) AS window_end__month + , date_trunc('quarter', listings_src_26000.active_to) AS window_end__quarter + , date_trunc('year', listings_src_26000.active_to) AS window_end__year + , toYear(listings_src_26000.active_to) AS window_end__extract_year + , toQuarter(listings_src_26000.active_to) AS window_end__extract_quarter + , toMonth(listings_src_26000.active_to) AS window_end__extract_month + , toDayOfMonth(listings_src_26000.active_to) AS window_end__extract_day + , toDayOfWeek(listings_src_26000.active_to) AS window_end__extract_dow + , toDayOfYear(listings_src_26000.active_to) AS window_end__extract_doy , listings_src_26000.country , listings_src_26000.is_lux , listings_src_26000.capacity , listings_src_26000.active_from AS listing__window_start__day - , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week - , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month - , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter - , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year - , EXTRACT(toYear FROM listings_src_26000.active_from) AS listing__window_start__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS listing__window_start__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , date_trunc('week', listings_src_26000.active_from) AS listing__window_start__week + , date_trunc('month', listings_src_26000.active_from) AS listing__window_start__month + , date_trunc('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , date_trunc('year', listings_src_26000.active_from) AS listing__window_start__year + , toYear(listings_src_26000.active_from) AS listing__window_start__extract_year + , toQuarter(listings_src_26000.active_from) AS listing__window_start__extract_quarter + , toMonth(listings_src_26000.active_from) AS listing__window_start__extract_month + , toDayOfMonth(listings_src_26000.active_from) AS listing__window_start__extract_day + , toDayOfWeek(listings_src_26000.active_from) AS listing__window_start__extract_dow + , toDayOfYear(listings_src_26000.active_from) AS listing__window_start__extract_doy , listings_src_26000.active_to AS listing__window_end__day - , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week - , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month - , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter - , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year - , EXTRACT(toYear FROM listings_src_26000.active_to) AS listing__window_end__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS listing__window_end__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , date_trunc('week', listings_src_26000.active_to) AS listing__window_end__week + , date_trunc('month', listings_src_26000.active_to) AS listing__window_end__month + , date_trunc('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , date_trunc('year', listings_src_26000.active_to) AS listing__window_end__year + , toYear(listings_src_26000.active_to) AS listing__window_end__extract_year + , toQuarter(listings_src_26000.active_to) AS listing__window_end__extract_quarter + , toMonth(listings_src_26000.active_to) AS listing__window_end__extract_month + , toDayOfMonth(listings_src_26000.active_to) AS listing__window_end__extract_day + , toDayOfWeek(listings_src_26000.active_to) AS listing__window_end__extract_dow + , toDayOfYear(listings_src_26000.active_to) AS listing__window_end__extract_doy , listings_src_26000.country AS listing__country , listings_src_26000.is_lux AS listing__is_lux , listings_src_26000.capacity AS listing__capacity @@ -464,19 +461,26 @@ FROM ( , listings_src_26000.user_id AS user , listings_src_26000.user_id AS listing__user FROM ***************************.dim_listings listings_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) ) subq_4 WHERE listing__capacity > 2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql index c8ab4eb7ee..1331f6bc90 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql @@ -21,17 +21,28 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - CROSS JOIN + LEFT OUTER JOIN ***************************.dim_listings listings_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) ) subq_12 WHERE listing__capacity > 2 GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql index cd3a84a72b..b81babbf70 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0.sql @@ -142,73 +142,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -216,17 +216,11 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.ds__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ds__day ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 LIMIT 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql index 8b26fe989f..e7cc32be4f 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_limit_rows__plan0_optimized.sql @@ -15,12 +15,10 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'ds__day'] SELECT - DATE_TRUNC('day', ds) AS ds__day + date_trunc('day', ds) AS ds__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY ds__day LIMIT 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql index d4f54f4cd2..25238f0588 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0.sql @@ -92,53 +92,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -146,14 +146,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql index 33cc2cc992..2c5ab50fd0 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_local_dimension_using_local_entity__plan0_optimized.sql @@ -15,8 +15,6 @@ FROM ( country AS listing__country_latest , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY listing__country_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql index 0e3b96a3e5..7499862c18 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql @@ -351,73 +351,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -425,12 +425,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['is_lux_latest', 'listing'] SELECT subq_3.listing @@ -511,53 +508,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -565,29 +562,20 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_1.listing = subq_4.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 WHERE listing__is_lux_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY - subq_7.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_18.metric_time__day @@ -925,73 +913,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -999,12 +987,9 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['is_lux_latest', 'listing'] SELECT subq_13.listing @@ -1085,53 +1070,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -1139,31 +1124,22 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_12 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_11.listing = subq_14.listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 WHERE listing__is_lux_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 GROUP BY - subq_17.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_18 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 ON subq_9.metric_time__day = subq_19.metric_time__day - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_23.metric_time__day @@ -1297,73 +1273,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -1371,22 +1347,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_22 GROUP BY - subq_22.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_23 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_24 ON COALESCE(subq_9.metric_time__day, subq_19.metric_time__day) = subq_24.metric_time__day GROUP BY - COALESCE(subq_9.metric_time__day, subq_19.metric_time__day, subq_24.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_25 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql index 0b62b6dbed..4db9665026 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql @@ -33,43 +33,36 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings , booking_value AS average_booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_27 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_27.listing = listings_latest_src_28000.listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_31 WHERE listing__is_lux_latest GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_35 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' -- Pass Only Elements: ['booking_value', 'metric_time__day'] -- Aggregate Measures -- Compute Metrics via Expressions SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , SUM(booking_value) AS booking_value FROM ***************************.fct_bookings bookings_source_src_28000 GROUP BY - DATE_TRUNC('day', ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_40 ON subq_35.metric_time__day = subq_40.metric_time__day GROUP BY - COALESCE(subq_35.metric_time__day, subq_40.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_41 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql index 529ea7e0f5..0e90017746 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql @@ -247,73 +247,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -321,23 +321,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_9.metric_time__day @@ -471,73 +464,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -545,22 +538,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON subq_5.metric_time__day = subq_10.metric_time__day GROUP BY - COALESCE(subq_5.metric_time__day, subq_10.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql index 3eab6fbbaf..e6a30090ce 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql @@ -7,11 +7,10 @@ WITH sma_28009_cte AS ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , booking_value FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) SELECT @@ -38,15 +37,12 @@ FROM ( , booking__is_instant , booking_value FROM sma_28009_cte sma_28009_cte - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 WHERE booking__is_instant GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 - FULL OUTER JOIN - ( + FULL OUTER JOIN ( -- Read From CTE For node_id=sma_28009 -- Pass Only Elements: ['booking_value', 'metric_time__day'] -- Aggregate Measures @@ -57,12 +53,9 @@ FROM ( FROM sma_28009_cte sma_28009_cte GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 ON subq_17.metric_time__day = subq_21.metric_time__day GROUP BY - COALESCE(subq_17.metric_time__day, subq_21.metric_time__day) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_22 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql index b50da6433e..fae012cdd4 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql @@ -241,73 +241,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -315,19 +315,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE NOT booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql index 29803eb671..7c8f1a3305 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql @@ -18,15 +18,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE NOT booking__is_instant GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql index 49fbdfe2ba..a9c7d16e0c 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql @@ -141,73 +141,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -215,18 +215,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - CROSS JOIN - ( + CROSS JOIN ( -- Compute Metrics via Expressions SELECT subq_8.listings @@ -314,53 +308,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -368,16 +362,9 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql index a3f2bccf64..59ac124048 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql @@ -15,10 +15,8 @@ FROM ( SELECT SUM(1) AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 -CROSS JOIN -( +CROSS JOIN ( -- Read Elements From Semantic Model 'listings_latest' -- Metric Time Dimension 'ds' -- Pass Only Elements: ['listings',] @@ -27,6 +25,4 @@ CROSS JOIN SELECT SUM(1) AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql index 4e02031bf9..3f5d05be46 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0.sql @@ -43,24 +43,20 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_2 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql index b641e0e46c..840dc6732e 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time__plan0_optimized.sql @@ -16,7 +16,5 @@ FROM ( ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - ds - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql index 1d0454e85f..02f3545d33 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0.sql @@ -43,24 +43,20 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 GROUP BY - subq_1.metric_time__week - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_2 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql index e37e0931e6..d561a85930 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_metric_time_week__plan0_optimized.sql @@ -13,10 +13,8 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['metric_time__week',] SELECT - DATE_TRUNC('week', ds) AS metric_time__week + date_trunc('week', ds) AS metric_time__week FROM ***************************.mf_time_spine time_spine_src_28006 GROUP BY - DATE_TRUNC('week', ds) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__week ) subq_5 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql index 00c5255793..0fca77a476 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0.sql @@ -18,53 +18,53 @@ FROM ( 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -72,10 +72,7 @@ FROM ( , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 GROUP BY - subq_0.listing__country_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql index 211a90f50a..b5584deb8d 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_categorical__plan0_optimized.sql @@ -15,7 +15,5 @@ FROM ( country AS listing__country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 GROUP BY - country - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + listing__country_latest ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql index f929ec1a9c..9dc5f20be3 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0.sql @@ -30,73 +30,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -104,10 +104,7 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 GROUP BY - subq_0.booking__paid_at__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__paid_at__day ) subq_1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql index 47d1240bcd..0bf09f1413 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time__plan0_optimized.sql @@ -12,10 +12,8 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Pass Only Elements: ['booking__paid_at__day',] SELECT - DATE_TRUNC('day', paid_at) AS booking__paid_at__day + date_trunc('day', paid_at) AS booking__paid_at__day FROM ***************************.fct_bookings bookings_source_src_28000 GROUP BY - DATE_TRUNC('day', paid_at) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__paid_at__day ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql index 9402d477e2..c4305783fb 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0.sql @@ -30,73 +30,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -104,10 +104,7 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 GROUP BY - subq_0.booking__paid_at__quarter - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__paid_at__quarter ) subq_1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql index 1fa82a3390..2d561c45c6 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_min_max_only_time_quarter__plan0_optimized.sql @@ -12,10 +12,8 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Pass Only Elements: ['booking__paid_at__quarter',] SELECT - DATE_TRUNC('quarter', paid_at) AS booking__paid_at__quarter + date_trunc('quarter', paid_at) AS booking__paid_at__quarter FROM ***************************.fct_bookings bookings_source_src_28000 GROUP BY - DATE_TRUNC('quarter', paid_at) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + booking__paid_at__quarter ) subq_3 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql index 55986c941c..17612e28c8 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql @@ -224,73 +224,73 @@ FROM ( , bookings_source_src_26000.booking_value AS average_booking_value , bookings_source_src_26000.booking_value AS booking_payments , bookings_source_src_26000.is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS ds__year + , toYear(bookings_source_src_26000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS paid_at__extract_doy , bookings_source_src_26000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS booking__ds__year + , toYear(bookings_source_src_26000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_26000.listing_id AS listing , bookings_source_src_26000.guest_id AS guest , bookings_source_src_26000.host_id AS host @@ -300,12 +300,9 @@ FROM ( , bookings_source_src_26000.host_id AS booking__host , bookings_source_src_26000.guest_id AS booking__user FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - CROSS JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] SELECT subq_5.window_start__day @@ -384,52 +381,52 @@ FROM ( -- Read Elements From Semantic Model 'listings' SELECT listings_src_26000.active_from AS window_start__day - , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week - , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month - , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter - , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year - , EXTRACT(toYear FROM listings_src_26000.active_from) AS window_start__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS window_start__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_from) AS window_start__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS window_start__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS window_start__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS window_start__extract_doy + , date_trunc('week', listings_src_26000.active_from) AS window_start__week + , date_trunc('month', listings_src_26000.active_from) AS window_start__month + , date_trunc('quarter', listings_src_26000.active_from) AS window_start__quarter + , date_trunc('year', listings_src_26000.active_from) AS window_start__year + , toYear(listings_src_26000.active_from) AS window_start__extract_year + , toQuarter(listings_src_26000.active_from) AS window_start__extract_quarter + , toMonth(listings_src_26000.active_from) AS window_start__extract_month + , toDayOfMonth(listings_src_26000.active_from) AS window_start__extract_day + , toDayOfWeek(listings_src_26000.active_from) AS window_start__extract_dow + , toDayOfYear(listings_src_26000.active_from) AS window_start__extract_doy , listings_src_26000.active_to AS window_end__day - , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week - , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month - , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter - , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year - , EXTRACT(toYear FROM listings_src_26000.active_to) AS window_end__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS window_end__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_to) AS window_end__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS window_end__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS window_end__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS window_end__extract_doy + , date_trunc('week', listings_src_26000.active_to) AS window_end__week + , date_trunc('month', listings_src_26000.active_to) AS window_end__month + , date_trunc('quarter', listings_src_26000.active_to) AS window_end__quarter + , date_trunc('year', listings_src_26000.active_to) AS window_end__year + , toYear(listings_src_26000.active_to) AS window_end__extract_year + , toQuarter(listings_src_26000.active_to) AS window_end__extract_quarter + , toMonth(listings_src_26000.active_to) AS window_end__extract_month + , toDayOfMonth(listings_src_26000.active_to) AS window_end__extract_day + , toDayOfWeek(listings_src_26000.active_to) AS window_end__extract_dow + , toDayOfYear(listings_src_26000.active_to) AS window_end__extract_doy , listings_src_26000.country , listings_src_26000.is_lux , listings_src_26000.capacity , listings_src_26000.active_from AS listing__window_start__day - , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week - , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month - , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter - , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year - , EXTRACT(toYear FROM listings_src_26000.active_from) AS listing__window_start__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_from) AS listing__window_start__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_from) AS listing__window_start__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , date_trunc('week', listings_src_26000.active_from) AS listing__window_start__week + , date_trunc('month', listings_src_26000.active_from) AS listing__window_start__month + , date_trunc('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , date_trunc('year', listings_src_26000.active_from) AS listing__window_start__year + , toYear(listings_src_26000.active_from) AS listing__window_start__extract_year + , toQuarter(listings_src_26000.active_from) AS listing__window_start__extract_quarter + , toMonth(listings_src_26000.active_from) AS listing__window_start__extract_month + , toDayOfMonth(listings_src_26000.active_from) AS listing__window_start__extract_day + , toDayOfWeek(listings_src_26000.active_from) AS listing__window_start__extract_dow + , toDayOfYear(listings_src_26000.active_from) AS listing__window_start__extract_doy , listings_src_26000.active_to AS listing__window_end__day - , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week - , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month - , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter - , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year - , EXTRACT(toYear FROM listings_src_26000.active_to) AS listing__window_end__extract_year - , EXTRACT(toQuarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter - , EXTRACT(toMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_month - , EXTRACT(toDayOfMonth FROM listings_src_26000.active_to) AS listing__window_end__extract_day - , EXTRACT(toDayOfWeek FROM listings_src_26000.active_to) AS listing__window_end__extract_dow - , EXTRACT(toDayOfYear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , date_trunc('week', listings_src_26000.active_to) AS listing__window_end__week + , date_trunc('month', listings_src_26000.active_to) AS listing__window_end__month + , date_trunc('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , date_trunc('year', listings_src_26000.active_to) AS listing__window_end__year + , toYear(listings_src_26000.active_to) AS listing__window_end__extract_year + , toQuarter(listings_src_26000.active_to) AS listing__window_end__extract_quarter + , toMonth(listings_src_26000.active_to) AS listing__window_end__extract_month + , toDayOfMonth(listings_src_26000.active_to) AS listing__window_end__extract_day + , toDayOfWeek(listings_src_26000.active_to) AS listing__window_end__extract_dow + , toDayOfYear(listings_src_26000.active_to) AS listing__window_end__extract_doy , listings_src_26000.country AS listing__country , listings_src_26000.is_lux AS listing__is_lux , listings_src_26000.capacity AS listing__capacity @@ -437,10 +434,8 @@ FROM ( , listings_src_26000.user_id AS user , listings_src_26000.user_id AS listing__user FROM ***************************.dim_listings listings_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'home_state_latest', -- 'user__home_state_latest', @@ -497,49 +492,55 @@ FROM ( FROM ( -- Read Elements From Semantic Model 'users_latest' SELECT - DATE_TRUNC('day', users_latest_src_26000.ds) AS ds__day - , DATE_TRUNC('week', users_latest_src_26000.ds) AS ds__week - , DATE_TRUNC('month', users_latest_src_26000.ds) AS ds__month - , DATE_TRUNC('quarter', users_latest_src_26000.ds) AS ds__quarter - , DATE_TRUNC('year', users_latest_src_26000.ds) AS ds__year - , EXTRACT(toYear FROM users_latest_src_26000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_latest_src_26000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_26000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_26000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_26000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_26000.ds) AS ds__extract_doy + date_trunc('day', users_latest_src_26000.ds) AS ds__day + , date_trunc('week', users_latest_src_26000.ds) AS ds__week + , date_trunc('month', users_latest_src_26000.ds) AS ds__month + , date_trunc('quarter', users_latest_src_26000.ds) AS ds__quarter + , date_trunc('year', users_latest_src_26000.ds) AS ds__year + , toYear(users_latest_src_26000.ds) AS ds__extract_year + , toQuarter(users_latest_src_26000.ds) AS ds__extract_quarter + , toMonth(users_latest_src_26000.ds) AS ds__extract_month + , toDayOfMonth(users_latest_src_26000.ds) AS ds__extract_day + , toDayOfWeek(users_latest_src_26000.ds) AS ds__extract_dow + , toDayOfYear(users_latest_src_26000.ds) AS ds__extract_doy , users_latest_src_26000.home_state_latest - , DATE_TRUNC('day', users_latest_src_26000.ds) AS user__ds__day - , DATE_TRUNC('week', users_latest_src_26000.ds) AS user__ds__week - , DATE_TRUNC('month', users_latest_src_26000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_latest_src_26000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_latest_src_26000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_latest_src_26000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_latest_src_26000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_latest_src_26000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_latest_src_26000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_latest_src_26000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_latest_src_26000.ds) AS user__ds__extract_doy + , date_trunc('day', users_latest_src_26000.ds) AS user__ds__day + , date_trunc('week', users_latest_src_26000.ds) AS user__ds__week + , date_trunc('month', users_latest_src_26000.ds) AS user__ds__month + , date_trunc('quarter', users_latest_src_26000.ds) AS user__ds__quarter + , date_trunc('year', users_latest_src_26000.ds) AS user__ds__year + , toYear(users_latest_src_26000.ds) AS user__ds__extract_year + , toQuarter(users_latest_src_26000.ds) AS user__ds__extract_quarter + , toMonth(users_latest_src_26000.ds) AS user__ds__extract_month + , toDayOfMonth(users_latest_src_26000.ds) AS user__ds__extract_day + , toDayOfWeek(users_latest_src_26000.ds) AS user__ds__extract_dow + , toDayOfYear(users_latest_src_26000.ds) AS user__ds__extract_doy , users_latest_src_26000.home_state_latest AS user__home_state_latest , users_latest_src_26000.user_id AS user FROM ***************************.dim_users_latest users_latest_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_2.user = subq_4.user - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.listing = subq_6.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_6.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_6.window_end__day + ) OR ( + subq_6.window_end__day IS NULL + ) + ) + ) ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - , subq_8.listing__user__home_state_latest - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__user__home_state_latest ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql index 48e83566a9..e7474c2796 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql @@ -16,14 +16,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -CROSS JOIN -( +LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] SELECT @@ -36,9 +34,21 @@ CROSS JOIN ***************************.dim_users_latest users_latest_src_26000 ON listings_src_26000.user_id = users_latest_src_26000.user_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 +ON + ( + subq_11.listing = subq_16.listing + ) AND ( + ( + subq_11.metric_time__day >= subq_16.window_start__day + ) AND ( + ( + subq_11.metric_time__day < subq_16.window_end__day + ) OR ( + subq_16.window_end__day IS NULL + ) + ) + ) GROUP BY - subq_11.metric_time__day - , subq_16.user__home_state_latest -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__user__home_state_latest diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql index ace6355e51..55ddc9f35a 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql @@ -224,73 +224,73 @@ FROM ( , bookings_source_src_26000.booking_value AS average_booking_value , bookings_source_src_26000.booking_value AS booking_payments , bookings_source_src_26000.is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS ds__year + , toYear(bookings_source_src_26000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS paid_at__extract_doy , bookings_source_src_26000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_26000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_26000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_26000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_26000.ds) AS booking__ds__year + , toYear(bookings_source_src_26000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_26000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_26000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_26000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_26000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_26000.listing_id AS listing , bookings_source_src_26000.guest_id AS guest , bookings_source_src_26000.host_id AS host @@ -300,12 +300,9 @@ FROM ( , bookings_source_src_26000.host_id AS booking__host , bookings_source_src_26000.guest_id AS booking__user FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - CROSS JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] SELECT subq_5.lux_listing__window_start__day @@ -348,10 +345,8 @@ FROM ( , lux_listing_mapping_src_26000.lux_listing_id AS lux_listing , lux_listing_mapping_src_26000.lux_listing_id AS listing__lux_listing FROM ***************************.dim_lux_listing_id_mapping lux_listing_mapping_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'is_confirmed_lux', -- 'lux_listing__is_confirmed_lux', @@ -453,70 +448,76 @@ FROM ( -- Read Elements From Semantic Model 'lux_listings' SELECT lux_listings_src_26000.valid_from AS window_start__day - , DATE_TRUNC('week', lux_listings_src_26000.valid_from) AS window_start__week - , DATE_TRUNC('month', lux_listings_src_26000.valid_from) AS window_start__month - , DATE_TRUNC('quarter', lux_listings_src_26000.valid_from) AS window_start__quarter - , DATE_TRUNC('year', lux_listings_src_26000.valid_from) AS window_start__year - , EXTRACT(toYear FROM lux_listings_src_26000.valid_from) AS window_start__extract_year - , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_from) AS window_start__extract_quarter - , EXTRACT(toMonth FROM lux_listings_src_26000.valid_from) AS window_start__extract_month - , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_from) AS window_start__extract_day - , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_from) AS window_start__extract_dow - , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_from) AS window_start__extract_doy + , date_trunc('week', lux_listings_src_26000.valid_from) AS window_start__week + , date_trunc('month', lux_listings_src_26000.valid_from) AS window_start__month + , date_trunc('quarter', lux_listings_src_26000.valid_from) AS window_start__quarter + , date_trunc('year', lux_listings_src_26000.valid_from) AS window_start__year + , toYear(lux_listings_src_26000.valid_from) AS window_start__extract_year + , toQuarter(lux_listings_src_26000.valid_from) AS window_start__extract_quarter + , toMonth(lux_listings_src_26000.valid_from) AS window_start__extract_month + , toDayOfMonth(lux_listings_src_26000.valid_from) AS window_start__extract_day + , toDayOfWeek(lux_listings_src_26000.valid_from) AS window_start__extract_dow + , toDayOfYear(lux_listings_src_26000.valid_from) AS window_start__extract_doy , lux_listings_src_26000.valid_to AS window_end__day - , DATE_TRUNC('week', lux_listings_src_26000.valid_to) AS window_end__week - , DATE_TRUNC('month', lux_listings_src_26000.valid_to) AS window_end__month - , DATE_TRUNC('quarter', lux_listings_src_26000.valid_to) AS window_end__quarter - , DATE_TRUNC('year', lux_listings_src_26000.valid_to) AS window_end__year - , EXTRACT(toYear FROM lux_listings_src_26000.valid_to) AS window_end__extract_year - , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_to) AS window_end__extract_quarter - , EXTRACT(toMonth FROM lux_listings_src_26000.valid_to) AS window_end__extract_month - , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_to) AS window_end__extract_day - , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_to) AS window_end__extract_dow - , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_to) AS window_end__extract_doy + , date_trunc('week', lux_listings_src_26000.valid_to) AS window_end__week + , date_trunc('month', lux_listings_src_26000.valid_to) AS window_end__month + , date_trunc('quarter', lux_listings_src_26000.valid_to) AS window_end__quarter + , date_trunc('year', lux_listings_src_26000.valid_to) AS window_end__year + , toYear(lux_listings_src_26000.valid_to) AS window_end__extract_year + , toQuarter(lux_listings_src_26000.valid_to) AS window_end__extract_quarter + , toMonth(lux_listings_src_26000.valid_to) AS window_end__extract_month + , toDayOfMonth(lux_listings_src_26000.valid_to) AS window_end__extract_day + , toDayOfWeek(lux_listings_src_26000.valid_to) AS window_end__extract_dow + , toDayOfYear(lux_listings_src_26000.valid_to) AS window_end__extract_doy , lux_listings_src_26000.is_confirmed_lux , lux_listings_src_26000.valid_from AS lux_listing__window_start__day - , DATE_TRUNC('week', lux_listings_src_26000.valid_from) AS lux_listing__window_start__week - , DATE_TRUNC('month', lux_listings_src_26000.valid_from) AS lux_listing__window_start__month - , DATE_TRUNC('quarter', lux_listings_src_26000.valid_from) AS lux_listing__window_start__quarter - , DATE_TRUNC('year', lux_listings_src_26000.valid_from) AS lux_listing__window_start__year - , EXTRACT(toYear FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_year - , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_quarter - , EXTRACT(toMonth FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_month - , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_day - , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_dow - , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_doy + , date_trunc('week', lux_listings_src_26000.valid_from) AS lux_listing__window_start__week + , date_trunc('month', lux_listings_src_26000.valid_from) AS lux_listing__window_start__month + , date_trunc('quarter', lux_listings_src_26000.valid_from) AS lux_listing__window_start__quarter + , date_trunc('year', lux_listings_src_26000.valid_from) AS lux_listing__window_start__year + , toYear(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_year + , toQuarter(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_quarter + , toMonth(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_month + , toDayOfMonth(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_day + , toDayOfWeek(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_dow + , toDayOfYear(lux_listings_src_26000.valid_from) AS lux_listing__window_start__extract_doy , lux_listings_src_26000.valid_to AS lux_listing__window_end__day - , DATE_TRUNC('week', lux_listings_src_26000.valid_to) AS lux_listing__window_end__week - , DATE_TRUNC('month', lux_listings_src_26000.valid_to) AS lux_listing__window_end__month - , DATE_TRUNC('quarter', lux_listings_src_26000.valid_to) AS lux_listing__window_end__quarter - , DATE_TRUNC('year', lux_listings_src_26000.valid_to) AS lux_listing__window_end__year - , EXTRACT(toYear FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_year - , EXTRACT(toQuarter FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_quarter - , EXTRACT(toMonth FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_month - , EXTRACT(toDayOfMonth FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_day - , EXTRACT(toDayOfWeek FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_dow - , EXTRACT(toDayOfYear FROM lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_doy + , date_trunc('week', lux_listings_src_26000.valid_to) AS lux_listing__window_end__week + , date_trunc('month', lux_listings_src_26000.valid_to) AS lux_listing__window_end__month + , date_trunc('quarter', lux_listings_src_26000.valid_to) AS lux_listing__window_end__quarter + , date_trunc('year', lux_listings_src_26000.valid_to) AS lux_listing__window_end__year + , toYear(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_year + , toQuarter(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_quarter + , toMonth(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_month + , toDayOfMonth(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_day + , toDayOfWeek(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_dow + , toDayOfYear(lux_listings_src_26000.valid_to) AS lux_listing__window_end__extract_doy , lux_listings_src_26000.is_confirmed_lux AS lux_listing__is_confirmed_lux , lux_listings_src_26000.lux_listing_id AS lux_listing FROM ***************************.dim_lux_listings lux_listings_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON subq_2.lux_listing = subq_4.lux_listing - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + ON + ( + subq_1.listing = subq_6.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_6.lux_listing__window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_6.lux_listing__window_end__day + ) OR ( + subq_6.lux_listing__window_end__day IS NULL + ) + ) + ) ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 GROUP BY - subq_8.metric_time__day - , subq_8.listing__lux_listing__is_confirmed_lux - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__lux_listing__is_confirmed_lux ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql index b1b4c50b19..2fe30f13e8 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql @@ -16,14 +16,12 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -CROSS JOIN -( +LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] SELECT @@ -36,9 +34,21 @@ CROSS JOIN ***************************.dim_lux_listings lux_listings_src_26000 ON lux_listing_mapping_src_26000.lux_listing_id = lux_listings_src_26000.lux_listing_id - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 +ON + ( + subq_11.listing = subq_16.listing + ) AND ( + ( + subq_11.metric_time__day >= subq_16.lux_listing__window_start__day + ) AND ( + ( + subq_11.metric_time__day < subq_16.lux_listing__window_end__day + ) OR ( + subq_16.lux_listing__window_end__day IS NULL + ) + ) + ) GROUP BY - subq_11.metric_time__day - , subq_16.lux_listing__is_confirmed_lux -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , listing__lux_listing__is_confirmed_lux diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql index aaeadf00ab..9f8eb00798 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0.sql @@ -148,60 +148,57 @@ FROM ( -- Read Elements From Semantic Model 'account_month_txns' SELECT account_month_txns_src_22000.txn_count - , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS ds__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS ds__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS ds__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS ds__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS ds__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS ds__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__year + , toYear(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds) AS ds__day + , date_trunc('week', account_month_txns_src_22000.ds) AS ds__week + , date_trunc('month', account_month_txns_src_22000.ds) AS ds__month + , date_trunc('quarter', account_month_txns_src_22000.ds) AS ds__quarter + , date_trunc('year', account_month_txns_src_22000.ds) AS ds__year + , toYear(account_month_txns_src_22000.ds) AS ds__extract_year + , toQuarter(account_month_txns_src_22000.ds) AS ds__extract_quarter + , toMonth(account_month_txns_src_22000.ds) AS ds__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds) AS ds__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds) AS ds__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds) AS ds__extract_doy , account_month_txns_src_22000.account_month - , DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy - , DATE_TRUNC('day', account_month_txns_src_22000.ds) AS account_id__ds__day - , DATE_TRUNC('week', account_month_txns_src_22000.ds) AS account_id__ds__week - , DATE_TRUNC('month', account_month_txns_src_22000.ds) AS account_id__ds__month - , DATE_TRUNC('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter - , DATE_TRUNC('year', account_month_txns_src_22000.ds) AS account_id__ds__year - , EXTRACT(toYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_year - , EXTRACT(toQuarter FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter - , EXTRACT(toMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_month - , EXTRACT(toDayOfMonth FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_day - , EXTRACT(toDayOfWeek FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_dow - , EXTRACT(toDayOfYear FROM account_month_txns_src_22000.ds) AS account_id__ds__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , date_trunc('week', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , date_trunc('month', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , date_trunc('quarter', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , date_trunc('year', account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , toYear(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , toQuarter(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , toMonth(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , date_trunc('day', account_month_txns_src_22000.ds) AS account_id__ds__day + , date_trunc('week', account_month_txns_src_22000.ds) AS account_id__ds__week + , date_trunc('month', account_month_txns_src_22000.ds) AS account_id__ds__month + , date_trunc('quarter', account_month_txns_src_22000.ds) AS account_id__ds__quarter + , date_trunc('year', account_month_txns_src_22000.ds) AS account_id__ds__year + , toYear(account_month_txns_src_22000.ds) AS account_id__ds__extract_year + , toQuarter(account_month_txns_src_22000.ds) AS account_id__ds__extract_quarter + , toMonth(account_month_txns_src_22000.ds) AS account_id__ds__extract_month + , toDayOfMonth(account_month_txns_src_22000.ds) AS account_id__ds__extract_day + , toDayOfWeek(account_month_txns_src_22000.ds) AS account_id__ds__extract_dow + , toDayOfYear(account_month_txns_src_22000.ds) AS account_id__ds__extract_doy , account_month_txns_src_22000.account_month AS account_id__account_month , account_month_txns_src_22000.account_id FROM ***************************.account_month_txns account_month_txns_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['customer_id__customer_name', 'ds_partitioned__day', 'account_id'] SELECT subq_7.ds_partitioned__day @@ -348,53 +345,50 @@ FROM ( SELECT account_id || customer_id AS account_customer_combos , bridge_table_src_22000.extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy , bridge_table_src_22000.extra_dim AS account_id__extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS account_id__ds_partitioned__extract_doy , bridge_table_src_22000.extra_dim AS bridge_account__extra_dim - , DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day - , DATE_TRUNC('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week - , DATE_TRUNC('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month - , DATE_TRUNC('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter - , DATE_TRUNC('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year - , EXTRACT(toYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy + , date_trunc('day', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__day + , date_trunc('week', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__week + , date_trunc('month', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__month + , date_trunc('quarter', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__quarter + , date_trunc('year', bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__year + , toYear(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_year + , toQuarter(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_quarter + , toMonth(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_month + , toDayOfMonth(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_day + , toDayOfWeek(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_dow + , toDayOfYear(bridge_table_src_22000.ds_partitioned) AS bridge_account__ds_partitioned__extract_doy , bridge_table_src_22000.account_id , bridge_table_src_22000.customer_id , bridge_table_src_22000.customer_id AS account_id__customer_id , bridge_table_src_22000.account_id AS bridge_account__account_id , bridge_table_src_22000.customer_id AS bridge_account__customer_id FROM ***************************.bridge_table bridge_table_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: [ -- 'customer_name', -- 'customer_atomic_weight', @@ -522,37 +516,34 @@ FROM ( 1 AS customers , customer_table_src_22000.customer_name , customer_table_src_22000.customer_atomic_weight - , DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', customer_table_src_22000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', customer_table_src_22000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', customer_table_src_22000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', customer_table_src_22000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', customer_table_src_22000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', customer_table_src_22000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', customer_table_src_22000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', customer_table_src_22000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', customer_table_src_22000.ds_partitioned) AS ds_partitioned__year + , toYear(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(customer_table_src_22000.ds_partitioned) AS ds_partitioned__extract_doy , customer_table_src_22000.customer_name AS customer_id__customer_name , customer_table_src_22000.customer_atomic_weight AS customer_id__customer_atomic_weight - , DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__day - , DATE_TRUNC('week', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__week - , DATE_TRUNC('month', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__month - , DATE_TRUNC('quarter', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__quarter - , DATE_TRUNC('year', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__year - , EXTRACT(toYear FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_doy + , date_trunc('day', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__day + , date_trunc('week', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__week + , date_trunc('month', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__month + , date_trunc('quarter', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__quarter + , date_trunc('year', customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__year + , toYear(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_year + , toQuarter(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_quarter + , toMonth(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_month + , toDayOfMonth(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_day + , toDayOfWeek(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_dow + , toDayOfYear(customer_table_src_22000.ds_partitioned) AS customer_id__ds_partitioned__extract_doy , customer_table_src_22000.customer_id FROM ***************************.customer_table customer_table_src_22000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 ON ( @@ -560,9 +551,7 @@ FROM ( ) AND ( subq_3.ds_partitioned__day = subq_6.ds_partitioned__day ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 ON ( @@ -570,12 +559,8 @@ FROM ( ) AND ( subq_1.ds_partitioned__day = subq_8.ds_partitioned__day ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY - subq_10.account_id__customer_id__customer_name - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + account_id__customer_id__customer_name ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql index 1e9c8f4d91..b56119e873 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multihop_node__plan0_optimized.sql @@ -12,12 +12,11 @@ SELECT subq_20.customer_id__customer_name AS account_id__customer_id__customer_name , SUM(account_month_txns_src_22000.txn_count) AS txn_count FROM ***************************.account_month_txns account_month_txns_src_22000 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['customer_id__customer_name', 'ds_partitioned__day', 'account_id'] SELECT - DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day + date_trunc('day', bridge_table_src_22000.ds_partitioned) AS ds_partitioned__day , bridge_table_src_22000.account_id AS account_id , customer_table_src_22000.customer_name AS customer_id__customer_name FROM ***************************.bridge_table bridge_table_src_22000 @@ -27,16 +26,14 @@ LEFT OUTER JOIN ( bridge_table_src_22000.customer_id = customer_table_src_22000.customer_id ) AND ( - DATE_TRUNC('day', bridge_table_src_22000.ds_partitioned) = DATE_TRUNC('day', customer_table_src_22000.ds_partitioned) + date_trunc('day', bridge_table_src_22000.ds_partitioned) = date_trunc('day', customer_table_src_22000.ds_partitioned) ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_20 ON ( account_month_txns_src_22000.account_id = subq_20.account_id ) AND ( - DATE_TRUNC('day', account_month_txns_src_22000.ds_partitioned) = subq_20.ds_partitioned__day + date_trunc('day', account_month_txns_src_22000.ds_partitioned) = subq_20.ds_partitioned__day ) GROUP BY - subq_20.customer_id__customer_name -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + account_id__customer_id__customer_name diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql index f2d55b65e2..e4b4da82e4 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql @@ -238,73 +238,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -312,21 +312,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 -CROSS JOIN -( +CROSS JOIN ( -- Compute Metrics via Expressions SELECT subq_10.listings @@ -484,53 +477,53 @@ CROSS JOIN 1 AS listings , listings_latest_src_28000.capacity AS largest_listing , listings_latest_src_28000.capacity AS smallest_listing - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS ds__year + , toYear(listings_latest_src_28000.created_at) AS ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS created_at__year + , toYear(listings_latest_src_28000.created_at) AS created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS created_at__extract_doy , listings_latest_src_28000.country AS country_latest , listings_latest_src_28000.is_lux AS is_lux_latest , listings_latest_src_28000.capacity AS capacity_latest - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__ds__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__ds__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__ds__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__ds__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__ds__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__ds__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__ds__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__ds__extract_doy - , DATE_TRUNC('day', listings_latest_src_28000.created_at) AS listing__created_at__day - , DATE_TRUNC('week', listings_latest_src_28000.created_at) AS listing__created_at__week - , DATE_TRUNC('month', listings_latest_src_28000.created_at) AS listing__created_at__month - , DATE_TRUNC('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter - , DATE_TRUNC('year', listings_latest_src_28000.created_at) AS listing__created_at__year - , EXTRACT(toYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_year - , EXTRACT(toQuarter FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter - , EXTRACT(toMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_month - , EXTRACT(toDayOfMonth FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_day - , EXTRACT(toDayOfWeek FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_dow - , EXTRACT(toDayOfYear FROM listings_latest_src_28000.created_at) AS listing__created_at__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__ds__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__ds__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__ds__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__ds__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__ds__year + , toYear(listings_latest_src_28000.created_at) AS listing__ds__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__ds__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__ds__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__ds__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__ds__extract_doy + , date_trunc('day', listings_latest_src_28000.created_at) AS listing__created_at__day + , date_trunc('week', listings_latest_src_28000.created_at) AS listing__created_at__week + , date_trunc('month', listings_latest_src_28000.created_at) AS listing__created_at__month + , date_trunc('quarter', listings_latest_src_28000.created_at) AS listing__created_at__quarter + , date_trunc('year', listings_latest_src_28000.created_at) AS listing__created_at__year + , toYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_year + , toQuarter(listings_latest_src_28000.created_at) AS listing__created_at__extract_quarter + , toMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_month + , toDayOfMonth(listings_latest_src_28000.created_at) AS listing__created_at__extract_day + , toDayOfWeek(listings_latest_src_28000.created_at) AS listing__created_at__extract_dow + , toDayOfYear(listings_latest_src_28000.created_at) AS listing__created_at__extract_doy , listings_latest_src_28000.country AS listing__country_latest , listings_latest_src_28000.is_lux AS listing__is_lux_latest , listings_latest_src_28000.capacity AS listing__capacity_latest @@ -538,17 +531,10 @@ CROSS JOIN , listings_latest_src_28000.user_id AS user , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql index 514d97629c..c5cf4281f0 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql @@ -16,11 +16,9 @@ FROM ( SELECT SUM(1) AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-01' ) subq_17 -CROSS JOIN -( +CROSS JOIN ( -- Read Elements From Semantic Model 'listings_latest' -- Metric Time Dimension 'ds' -- Constrain Time Range to [2020-01-01T00:00:00, 2020-01-01T00:00:00] @@ -30,7 +28,5 @@ CROSS JOIN SELECT SUM(1) AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - WHERE DATE_TRUNC('day', created_at) BETWEEN '2020-01-01' AND '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', created_at) BETWEEN '2020-01-01' AND '2020-01-01' ) subq_23 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql index b36c4ba793..fe05f1c111 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0.sql @@ -118,51 +118,48 @@ FROM ( , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - INNER JOIN - ( + INNER JOIN ( -- Filter row on MIN(ds_month__month) SELECT MIN(subq_2.ds_month__month) AS ds_month__month__complete @@ -221,57 +218,50 @@ FROM ( , accounts_source_src_28000.account_balance AS total_account_balance_first_day , accounts_source_src_28000.account_balance AS current_account_balance_by_user , accounts_source_src_28000.account_balance AS total_account_balance_first_day_of_month - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS ds__year + , toYear(accounts_source_src_28000.ds) AS ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS ds_month__extract_month , accounts_source_src_28000.account_type - , DATE_TRUNC('day', accounts_source_src_28000.ds) AS account__ds__day - , DATE_TRUNC('week', accounts_source_src_28000.ds) AS account__ds__week - , DATE_TRUNC('month', accounts_source_src_28000.ds) AS account__ds__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds) AS account__ds__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds) AS account__ds__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds) AS account__ds__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds) AS account__ds__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_month - , EXTRACT(toDayOfMonth FROM accounts_source_src_28000.ds) AS account__ds__extract_day - , EXTRACT(toDayOfWeek FROM accounts_source_src_28000.ds) AS account__ds__extract_dow - , EXTRACT(toDayOfYear FROM accounts_source_src_28000.ds) AS account__ds__extract_doy - , DATE_TRUNC('month', accounts_source_src_28000.ds_month) AS account__ds_month__month - , DATE_TRUNC('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter - , DATE_TRUNC('year', accounts_source_src_28000.ds_month) AS account__ds_month__year - , EXTRACT(toYear FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_year - , EXTRACT(toQuarter FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter - , EXTRACT(toMonth FROM accounts_source_src_28000.ds_month) AS account__ds_month__extract_month + , date_trunc('day', accounts_source_src_28000.ds) AS account__ds__day + , date_trunc('week', accounts_source_src_28000.ds) AS account__ds__week + , date_trunc('month', accounts_source_src_28000.ds) AS account__ds__month + , date_trunc('quarter', accounts_source_src_28000.ds) AS account__ds__quarter + , date_trunc('year', accounts_source_src_28000.ds) AS account__ds__year + , toYear(accounts_source_src_28000.ds) AS account__ds__extract_year + , toQuarter(accounts_source_src_28000.ds) AS account__ds__extract_quarter + , toMonth(accounts_source_src_28000.ds) AS account__ds__extract_month + , toDayOfMonth(accounts_source_src_28000.ds) AS account__ds__extract_day + , toDayOfWeek(accounts_source_src_28000.ds) AS account__ds__extract_dow + , toDayOfYear(accounts_source_src_28000.ds) AS account__ds__extract_doy + , date_trunc('month', accounts_source_src_28000.ds_month) AS account__ds_month__month + , date_trunc('quarter', accounts_source_src_28000.ds_month) AS account__ds_month__quarter + , date_trunc('year', accounts_source_src_28000.ds_month) AS account__ds_month__year + , toYear(accounts_source_src_28000.ds_month) AS account__ds_month__extract_year + , toQuarter(accounts_source_src_28000.ds_month) AS account__ds_month__extract_quarter + , toMonth(accounts_source_src_28000.ds_month) AS account__ds_month__extract_month , accounts_source_src_28000.account_type AS account__account_type , accounts_source_src_28000.user_id AS user , accounts_source_src_28000.user_id AS account__user FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 ON subq_1.ds_month__month = subq_3.ds_month__month__complete - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql index 9b0e6159d4..d01183ffc4 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_non_additive_dimension_with_non_default_grain__plan0_optimized.sql @@ -14,21 +14,17 @@ FROM ( -- Read Elements From Semantic Model 'accounts_source' -- Metric Time Dimension 'ds_month' SELECT - DATE_TRUNC('month', ds_month) AS ds_month__month + date_trunc('month', ds_month) AS ds_month__month , account_balance AS total_account_balance_first_day_of_month FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -INNER JOIN -( +INNER JOIN ( -- Read Elements From Semantic Model 'accounts_source' -- Metric Time Dimension 'ds_month' -- Filter row on MIN(ds_month__month) SELECT - MIN(DATE_TRUNC('month', ds_month)) AS ds_month__month__complete + MIN(date_trunc('month', ds_month)) AS ds_month__month__complete FROM ***************************.fct_accounts accounts_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 ON subq_8.ds_month__month = subq_10.ds_month__month__complete -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql index 12c3b55071..7a787837c0 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0.sql @@ -152,62 +152,59 @@ FROM ( -- Read Elements From Semantic Model 'id_verifications' SELECT 1 AS identity_verifications - , DATE_TRUNC('day', id_verifications_src_28000.ds) AS ds__day - , DATE_TRUNC('week', id_verifications_src_28000.ds) AS ds__week - , DATE_TRUNC('month', id_verifications_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', id_verifications_src_28000.ds) AS ds__day + , date_trunc('week', id_verifications_src_28000.ds) AS ds__week + , date_trunc('month', id_verifications_src_28000.ds) AS ds__month + , date_trunc('quarter', id_verifications_src_28000.ds) AS ds__quarter + , date_trunc('year', id_verifications_src_28000.ds) AS ds__year + , toYear(id_verifications_src_28000.ds) AS ds__extract_year + , toQuarter(id_verifications_src_28000.ds) AS ds__extract_quarter + , toMonth(id_verifications_src_28000.ds) AS ds__extract_month + , toDayOfMonth(id_verifications_src_28000.ds) AS ds__extract_day + , toDayOfWeek(id_verifications_src_28000.ds) AS ds__extract_dow + , toDayOfYear(id_verifications_src_28000.ds) AS ds__extract_doy + , date_trunc('day', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', id_verifications_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(id_verifications_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , id_verifications_src_28000.verification_type - , DATE_TRUNC('day', id_verifications_src_28000.ds) AS verification__ds__day - , DATE_TRUNC('week', id_verifications_src_28000.ds) AS verification__ds__week - , DATE_TRUNC('month', id_verifications_src_28000.ds) AS verification__ds__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds) AS verification__ds__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds) AS verification__ds__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds) AS verification__ds__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds) AS verification__ds__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds) AS verification__ds__extract_doy - , DATE_TRUNC('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day - , DATE_TRUNC('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week - , DATE_TRUNC('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month - , DATE_TRUNC('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter - , DATE_TRUNC('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year - , EXTRACT(toYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy + , date_trunc('day', id_verifications_src_28000.ds) AS verification__ds__day + , date_trunc('week', id_verifications_src_28000.ds) AS verification__ds__week + , date_trunc('month', id_verifications_src_28000.ds) AS verification__ds__month + , date_trunc('quarter', id_verifications_src_28000.ds) AS verification__ds__quarter + , date_trunc('year', id_verifications_src_28000.ds) AS verification__ds__year + , toYear(id_verifications_src_28000.ds) AS verification__ds__extract_year + , toQuarter(id_verifications_src_28000.ds) AS verification__ds__extract_quarter + , toMonth(id_verifications_src_28000.ds) AS verification__ds__extract_month + , toDayOfMonth(id_verifications_src_28000.ds) AS verification__ds__extract_day + , toDayOfWeek(id_verifications_src_28000.ds) AS verification__ds__extract_dow + , toDayOfYear(id_verifications_src_28000.ds) AS verification__ds__extract_doy + , date_trunc('day', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__day + , date_trunc('week', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__week + , date_trunc('month', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__month + , date_trunc('quarter', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__quarter + , date_trunc('year', id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__year + , toYear(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_year + , toQuarter(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_quarter + , toMonth(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_month + , toDayOfMonth(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_day + , toDayOfWeek(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_dow + , toDayOfYear(id_verifications_src_28000.ds_partitioned) AS verification__ds_partitioned__extract_doy , id_verifications_src_28000.verification_type AS verification__verification_type , id_verifications_src_28000.verification_id AS verification , id_verifications_src_28000.user_id AS user , id_verifications_src_28000.user_id AS verification__user FROM ***************************.fct_id_verifications id_verifications_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Pass Only Elements: ['home_state', 'ds_partitioned__day', 'user'] SELECT subq_3.ds_partitioned__day @@ -410,189 +407,186 @@ FROM ( SELECT 1 AS new_users , 1 AS archived_users - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS ds__year + , toYear(users_ds_source_src_28000.ds) AS ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS created_at__year + , toYear(users_ds_source_src_28000.created_at) AS created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy , users_ds_source_src_28000.home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS archived_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds) AS user__ds__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds) AS user__ds__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds) AS user__ds__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds) AS user__ds__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds) AS user__ds__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds) AS user__ds__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds) AS user__ds__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds) AS user__ds__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.created_at) AS user__created_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.created_at) AS user__created_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.created_at) AS user__created_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.created_at) AS user__created_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.created_at) AS user__created_at__extract_doy - , DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day - , DATE_TRUNC('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week - , DATE_TRUNC('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year - , EXTRACT(toYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS archived_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds) AS user__ds__day + , date_trunc('week', users_ds_source_src_28000.ds) AS user__ds__week + , date_trunc('month', users_ds_source_src_28000.ds) AS user__ds__month + , date_trunc('quarter', users_ds_source_src_28000.ds) AS user__ds__quarter + , date_trunc('year', users_ds_source_src_28000.ds) AS user__ds__year + , toYear(users_ds_source_src_28000.ds) AS user__ds__extract_year + , toQuarter(users_ds_source_src_28000.ds) AS user__ds__extract_quarter + , toMonth(users_ds_source_src_28000.ds) AS user__ds__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds) AS user__ds__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds) AS user__ds__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds) AS user__ds__extract_doy + , date_trunc('day', users_ds_source_src_28000.created_at) AS user__created_at__day + , date_trunc('week', users_ds_source_src_28000.created_at) AS user__created_at__week + , date_trunc('month', users_ds_source_src_28000.created_at) AS user__created_at__month + , date_trunc('quarter', users_ds_source_src_28000.created_at) AS user__created_at__quarter + , date_trunc('year', users_ds_source_src_28000.created_at) AS user__created_at__year + , toYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_year + , toQuarter(users_ds_source_src_28000.created_at) AS user__created_at__extract_quarter + , toMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.created_at) AS user__created_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.created_at) AS user__created_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.created_at) AS user__created_at__extract_doy + , date_trunc('day', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__day + , date_trunc('week', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__week + , date_trunc('month', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__month + , date_trunc('quarter', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__quarter + , date_trunc('year', users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__year + , toYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_year + , toQuarter(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_quarter + , toMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_month + , toDayOfMonth(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_day + , toDayOfWeek(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_dow + , toDayOfYear(users_ds_source_src_28000.ds_partitioned) AS user__ds_partitioned__extract_doy , users_ds_source_src_28000.home_state AS user__home_state - , DATE_TRUNC('millisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond - , DATE_TRUNC('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy - , DATE_TRUNC('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second - , DATE_TRUNC('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy - , DATE_TRUNC('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute - , DATE_TRUNC('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour - , DATE_TRUNC('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day - , DATE_TRUNC('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week - , DATE_TRUNC('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year - , EXTRACT(toYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy - , DATE_TRUNC('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour - , DATE_TRUNC('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day - , DATE_TRUNC('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week - , DATE_TRUNC('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month - , DATE_TRUNC('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter - , DATE_TRUNC('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year - , EXTRACT(toYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year - , EXTRACT(toQuarter FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter - , EXTRACT(toMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month - , EXTRACT(toDayOfMonth FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day - , EXTRACT(toDayOfWeek FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow - , EXTRACT(toDayOfYear FROM users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy + , date_trunc('milisecond', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__millisecond + , date_trunc('second', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__second + , date_trunc('minute', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__day + , date_trunc('week', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__week + , date_trunc('month', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__year + , toYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_profile_edit_ts) AS user__last_profile_edit_ts__extract_doy + , date_trunc('second', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__second + , date_trunc('minute', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__minute + , date_trunc('hour', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__hour + , date_trunc('day', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__day + , date_trunc('week', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__week + , date_trunc('month', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__month + , date_trunc('quarter', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__quarter + , date_trunc('year', users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__year + , toYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_year + , toQuarter(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_quarter + , toMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.bio_added_ts) AS user__bio_added_ts__extract_doy + , date_trunc('minute', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__minute + , date_trunc('hour', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__hour + , date_trunc('day', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__day + , date_trunc('week', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__week + , date_trunc('month', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__month + , date_trunc('quarter', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__quarter + , date_trunc('year', users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__year + , toYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_year + , toQuarter(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_quarter + , toMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_month + , toDayOfMonth(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_day + , toDayOfWeek(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_dow + , toDayOfYear(users_ds_source_src_28000.last_login_ts) AS user__last_login_ts__extract_doy + , date_trunc('hour', users_ds_source_src_28000.archived_at) AS user__archived_at__hour + , date_trunc('day', users_ds_source_src_28000.archived_at) AS user__archived_at__day + , date_trunc('week', users_ds_source_src_28000.archived_at) AS user__archived_at__week + , date_trunc('month', users_ds_source_src_28000.archived_at) AS user__archived_at__month + , date_trunc('quarter', users_ds_source_src_28000.archived_at) AS user__archived_at__quarter + , date_trunc('year', users_ds_source_src_28000.archived_at) AS user__archived_at__year + , toYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_year + , toQuarter(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_quarter + , toMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_month + , toDayOfMonth(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_day + , toDayOfWeek(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_dow + , toDayOfYear(users_ds_source_src_28000.archived_at) AS user__archived_at__extract_doy , users_ds_source_src_28000.user_id AS user FROM ***************************.dim_users users_ds_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 ON ( @@ -600,12 +594,8 @@ FROM ( ) AND ( subq_1.ds_partitioned__day = subq_4.ds_partitioned__day ) - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 GROUP BY - subq_6.user__home_state - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__home_state ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql index 07faa02252..0b5b6b881e 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_partitioned_join__plan0_optimized.sql @@ -15,11 +15,10 @@ FROM ( -- Read Elements From Semantic Model 'id_verifications' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds_partitioned) AS ds_partitioned__day + date_trunc('day', ds_partitioned) AS ds_partitioned__day , user_id AS user , 1 AS identity_verifications FROM ***************************.fct_id_verifications id_verifications_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 LEFT OUTER JOIN ***************************.dim_users users_ds_source_src_28000 @@ -27,8 +26,7 @@ ON ( subq_9.user = users_ds_source_src_28000.user_id ) AND ( - subq_9.ds_partitioned__day = DATE_TRUNC('day', users_ds_source_src_28000.ds_partitioned) + subq_9.ds_partitioned__day = date_trunc('day', users_ds_source_src_28000.ds_partitioned) ) GROUP BY - users_ds_source_src_28000.home_state -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__home_state diff --git a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql index a0b65cceed..c21fec8f24 100644 --- a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql +++ b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_id_enumeration__query.sql @@ -18,17 +18,14 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 -FULL OUTER JOIN -( +FULL OUTER JOIN ( -- Aggregate Measures -- Compute Metrics via Expressions SELECT @@ -39,17 +36,14 @@ FULL OUTER JOIN -- Metric Time Dimension 'ds' -- Pass Only Elements: ['listings', 'metric_time__day'] SELECT - DATE_TRUNC('day', created_at) AS metric_time__day + date_trunc('day', created_at) AS metric_time__day , 1 AS listings FROM ***************************.dim_listings_latest listings_latest_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 ON subq_4.metric_time__day = subq_9.metric_time__day GROUP BY - COALESCE(subq_4.metric_time__day, subq_9.metric_time__day) -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day diff --git a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql index 53f299b053..d7d9633af7 100644 --- a/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql +++ b/tests_metricflow/snapshots/test_rendered_query.py/str/Clickhouse/test_render_query__query0.sql @@ -12,11 +12,9 @@ FROM ( -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_10000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql index 8ab8657164..7b30ad6ea2 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan0.sql @@ -8,4 +8,3 @@ sql_engine: Clickhouse SELECT SUM(1) AS bookings FROM demo.fct_bookings a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql index 6c3705542c..f1b6310382 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan1.sql @@ -10,4 +10,3 @@ SELECT , b.country AS user__country , c.country AS listing__country FROM demo.fct_bookings a -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql index 79bfeb6703..b36a5090ad 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan2.sql @@ -14,4 +14,3 @@ LEFT OUTER JOIN demo.dim_users b ON a.user_id = b.user_id -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql index 8439544252..4f191a1c4a 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan3.sql @@ -18,4 +18,3 @@ LEFT OUTER JOIN demo.dim_listings c ON a.user_id = c.user_id -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql index 2d6625ef18..0b45c859b2 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan4.sql @@ -19,5 +19,4 @@ LEFT OUTER JOIN ON a.user_id = c.user_id GROUP BY - b.country -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__country diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql index 765fcc5b98..12ef8bdaa0 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_component_rendering__plan5.sql @@ -19,6 +19,5 @@ LEFT OUTER JOIN ON a.user_id = c.user_id GROUP BY - b.country - , c.country -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + user__country + , listing__country diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql index 015491bf78..ad747b13a5 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_table_as.sql @@ -8,5 +8,4 @@ CREATE TABLE schema_name.table_name AS ( a.bookings FROM demo.fct_bookings a LIMIT 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql index c0ec77b569..e70a13e3bb 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_create_table_as__create_view_as.sql @@ -8,5 +8,4 @@ CREATE VIEW schema_name.table_name AS ( a.bookings FROM demo.fct_bookings a LIMIT 1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql index de55c35e35..38f30fb0ea 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_limit__plan0.sql @@ -7,4 +7,3 @@ SELECT a.bookings FROM demo.fct_bookings a LIMIT 1 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql index 428366c81b..c27d493cff 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_order_by__plan0.sql @@ -8,4 +8,3 @@ SELECT , a.bookings FROM demo.fct_bookings a ORDER BY a.booking_value, a.bookings DESC -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql index cea4c66e20..92a99dbc61 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql @@ -7,4 +7,3 @@ SELECT a.booking_value FROM demo.fct_bookings a WHERE a.booking_value > 100 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql index 341988b32e..ffb282138a 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql @@ -24,7 +24,8 @@ FROM ( FROM ( -- Constrain Output with WHERE SELECT - subq_6.ds__week + subq_6.metric_time__day + , subq_6.ds__week , subq_6.ds__month , subq_6.ds__quarter , subq_6.ds__year @@ -35,7 +36,6 @@ FROM ( , subq_6.ds__extract_dow , subq_6.ds__extract_doy , subq_6.ds__martian_day - , subq_6.metric_time__day FROM ( -- Change Column Aliases SELECT @@ -55,29 +55,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE metric_time__day > '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -309,73 +304,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -383,22 +378,15 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - , subq_3.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , booking__is_instant ) subq_4 ON subq_8.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql index 3f7961f264..d3625c1c63 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql @@ -23,13 +23,10 @@ FROM ( SELECT ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_16 WHERE metric_time__day > '2020-01-01' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] -- Aggregate Measures @@ -41,19 +38,16 @@ LEFT OUTER JOIN -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , listing_id AS listing , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') GROUP BY metric_time__day , booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON subq_18.metric_time__day = subq_14.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql index 91093bc376..8b8bc72c25 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql @@ -25,7 +25,8 @@ FROM ( FROM ( -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] SELECT - subq_6.ds__week + subq_6.metric_time__day + , subq_6.ds__week , subq_6.ds__month , subq_6.ds__quarter , subq_6.ds__year @@ -36,7 +37,6 @@ FROM ( , subq_6.ds__extract_dow , subq_6.ds__extract_doy , subq_6.ds__martian_day - , subq_6.metric_time__day FROM ( -- Change Column Aliases SELECT @@ -56,29 +56,24 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 WHERE subq_6.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -308,73 +303,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -382,24 +377,16 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 ON subq_8.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 WHERE subq_9.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql index 51a16da5d3..73581798ea 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql @@ -23,10 +23,8 @@ FROM ( ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 WHERE ds BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__day @@ -37,19 +35,15 @@ FROM ( -- Constrain Time Range to [2020-01-03T00:00:00, 2020-01-05T00:00:00] -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE DATE_TRUNC('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + WHERE date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' ) subq_14 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_15 ON subq_19.metric_time__day = subq_15.metric_time__day WHERE subq_19.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_21 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql index 77e3dca0b6..c76b427642 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0.sql @@ -34,26 +34,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_4 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_2.metric_time__day @@ -182,73 +178,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -256,18 +252,12 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 GROUP BY - subq_2.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_3 ON subq_6.metric_time__day = subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql index 37cf418f3d..fd9d091e9f 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine__plan0_optimized.sql @@ -8,8 +8,7 @@ SELECT time_spine_src_28006.ds AS metric_time__day , subq_11.bookings AS bookings_join_to_time_spine FROM ***************************.mf_time_spine time_spine_src_28006 -LEFT OUTER JOIN -( +LEFT OUTER JOIN ( -- Aggregate Measures SELECT metric_time__day @@ -19,15 +18,12 @@ LEFT OUTER JOIN -- Metric Time Dimension 'ds' -- Pass Only Elements: ['bookings', 'metric_time__day'] SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 ON time_spine_src_28006.ds = subq_11.metric_time__day -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql index b25cd72fb3..d109c86393 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql @@ -36,26 +36,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -285,73 +281,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -359,21 +355,14 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day ) subq_4 ON subq_7.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql index 2849d09fda..bf2aa84bc3 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql @@ -14,8 +14,7 @@ FROM ( time_spine_src_28006.ds AS metric_time__day , subq_13.bookings AS bookings FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'metric_time__day'] -- Aggregate Measures @@ -26,19 +25,15 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_10 WHERE booking__is_instant GROUP BY metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_13 ON time_spine_src_28006.ds = subq_13.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_17 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql index 5bbe9cd044..086224460c 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql @@ -44,26 +44,22 @@ FROM ( -- Read From Time Spine 'mf_time_spine' SELECT time_spine_src_28006.ds AS ds__day - , DATE_TRUNC('week', time_spine_src_28006.ds) AS ds__week - , DATE_TRUNC('month', time_spine_src_28006.ds) AS ds__month - , DATE_TRUNC('quarter', time_spine_src_28006.ds) AS ds__quarter - , DATE_TRUNC('year', time_spine_src_28006.ds) AS ds__year - , EXTRACT(toYear FROM time_spine_src_28006.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM time_spine_src_28006.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM time_spine_src_28006.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM time_spine_src_28006.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM time_spine_src_28006.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM time_spine_src_28006.ds) AS ds__extract_doy + , date_trunc('week', time_spine_src_28006.ds) AS ds__week + , date_trunc('month', time_spine_src_28006.ds) AS ds__month + , date_trunc('quarter', time_spine_src_28006.ds) AS ds__quarter + , date_trunc('year', time_spine_src_28006.ds) AS ds__year + , toYear(time_spine_src_28006.ds) AS ds__extract_year + , toQuarter(time_spine_src_28006.ds) AS ds__extract_quarter + , toMonth(time_spine_src_28006.ds) AS ds__extract_month + , toDayOfMonth(time_spine_src_28006.ds) AS ds__extract_day + , toDayOfWeek(time_spine_src_28006.ds) AS ds__extract_dow + , toDayOfYear(time_spine_src_28006.ds) AS ds__extract_doy , time_spine_src_28006.martian_day AS ds__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_5 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_6 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_7 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Aggregate Measures SELECT subq_3.metric_time__day @@ -295,73 +291,73 @@ FROM ( , bookings_source_src_28000.booking_value AS approximate_continuous_booking_value_p99 , bookings_source_src_28000.booking_value AS approximate_discrete_booking_value_p99 , bookings_source_src_28000.is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS ds__year + , toYear(bookings_source_src_28000.ds) AS ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS paid_at__extract_doy , bookings_source_src_28000.is_instant AS booking__is_instant - , DATE_TRUNC('day', bookings_source_src_28000.ds) AS booking__ds__day - , DATE_TRUNC('week', bookings_source_src_28000.ds) AS booking__ds__week - , DATE_TRUNC('month', bookings_source_src_28000.ds) AS booking__ds__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds) AS booking__ds__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds) AS booking__ds__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds) AS booking__ds__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds) AS booking__ds__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds) AS booking__ds__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day - , DATE_TRUNC('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week - , DATE_TRUNC('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month - , DATE_TRUNC('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter - , DATE_TRUNC('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year - , EXTRACT(toYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy - , DATE_TRUNC('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day - , DATE_TRUNC('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week - , DATE_TRUNC('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month - , DATE_TRUNC('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter - , DATE_TRUNC('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year - , EXTRACT(toYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year - , EXTRACT(toQuarter FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter - , EXTRACT(toMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month - , EXTRACT(toDayOfMonth FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day - , EXTRACT(toDayOfWeek FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow - , EXTRACT(toDayOfYear FROM bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy + , date_trunc('day', bookings_source_src_28000.ds) AS booking__ds__day + , date_trunc('week', bookings_source_src_28000.ds) AS booking__ds__week + , date_trunc('month', bookings_source_src_28000.ds) AS booking__ds__month + , date_trunc('quarter', bookings_source_src_28000.ds) AS booking__ds__quarter + , date_trunc('year', bookings_source_src_28000.ds) AS booking__ds__year + , toYear(bookings_source_src_28000.ds) AS booking__ds__extract_year + , toQuarter(bookings_source_src_28000.ds) AS booking__ds__extract_quarter + , toMonth(bookings_source_src_28000.ds) AS booking__ds__extract_month + , toDayOfMonth(bookings_source_src_28000.ds) AS booking__ds__extract_day + , toDayOfWeek(bookings_source_src_28000.ds) AS booking__ds__extract_dow + , toDayOfYear(bookings_source_src_28000.ds) AS booking__ds__extract_doy + , date_trunc('day', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__day + , date_trunc('week', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__week + , date_trunc('month', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__month + , date_trunc('quarter', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__quarter + , date_trunc('year', bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__year + , toYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_year + , toQuarter(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , toMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_month + , toDayOfMonth(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_day + , toDayOfWeek(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , toDayOfYear(bookings_source_src_28000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , date_trunc('day', bookings_source_src_28000.paid_at) AS booking__paid_at__day + , date_trunc('week', bookings_source_src_28000.paid_at) AS booking__paid_at__week + , date_trunc('month', bookings_source_src_28000.paid_at) AS booking__paid_at__month + , date_trunc('quarter', bookings_source_src_28000.paid_at) AS booking__paid_at__quarter + , date_trunc('year', bookings_source_src_28000.paid_at) AS booking__paid_at__year + , toYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_year + , toQuarter(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_quarter + , toMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_month + , toDayOfMonth(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_day + , toDayOfWeek(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_dow + , toDayOfYear(bookings_source_src_28000.paid_at) AS booking__paid_at__extract_doy , bookings_source_src_28000.listing_id AS listing , bookings_source_src_28000.guest_id AS guest , bookings_source_src_28000.host_id AS host @@ -369,25 +365,17 @@ FROM ( , bookings_source_src_28000.guest_id AS booking__guest , bookings_source_src_28000.host_id AS booking__host FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_0 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_1 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_2 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_3 GROUP BY - subq_3.metric_time__day - , subq_3.booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 + metric_time__day + , booking__is_instant ) subq_4 ON subq_7.metric_time__day = subq_4.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_8 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_9 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql index acfdc14168..4bdd1e5d3d 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql @@ -22,8 +22,7 @@ FROM ( , subq_14.booking__is_instant AS booking__is_instant , subq_14.bookings AS bookings FROM ***************************.mf_time_spine time_spine_src_28006 - LEFT OUTER JOIN - ( + LEFT OUTER JOIN ( -- Constrain Output with WHERE -- Pass Only Elements: ['bookings', 'booking__is_instant', 'metric_time__day'] -- Aggregate Measures @@ -35,23 +34,18 @@ FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' SELECT - DATE_TRUNC('day', ds) AS metric_time__day + date_trunc('day', ds) AS metric_time__day , is_instant AS booking__is_instant , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_11 WHERE booking__is_instant GROUP BY metric_time__day , booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_14 ON time_spine_src_28006.ds = subq_14.metric_time__day - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_18 WHERE booking__is_instant - SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 ) subq_19 -SETTINGS allow_experimental_join_condition = 1, allow_experimental_analyzer = 1, join_use_nulls = 0 From ca015f092f56d9aa5506794cbc90d8e940144e9c Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Wed, 15 Jan 2025 15:06:49 -0300 Subject: [PATCH 5/6] Update snapshots & tests --- local-data-warehouses/clickhouse/config.xml | 6 - .../clickhouse/docker-compose.yaml | 2 - metricflow/sql/render/clickhouse.py | 265 +-- .../metricflow_testing/profiles.yml | 2 + .../sql_clients/adapter_backed_ddl_client.py | 2 +- .../test_cases/itest_granularity.yaml | 4 +- .../integration/test_cases/itest_metrics.yaml | 12 +- .../test_conversion_metric__plan0.sql | 19 +- ...est_conversion_metric__plan0_optimized.sql | 19 +- ..._metric_with_categorical_filter__plan0.sql | 19 +- ...th_categorical_filter__plan0_optimized.sql | 19 +- ...different_time_dimension_grains__plan0.sql | 17 +- ...time_dimension_grains__plan0_optimized.sql | 17 +- ...t_conversion_metric_with_filter__plan0.sql | 19 +- ...on_metric_with_filter__plan0_optimized.sql | 19 +- ...ric_with_filter_not_in_group_by__plan0.sql | 19 +- ...ilter_not_in_group_by__plan0_optimized.sql | 19 +- ...ion_metric_with_time_constraint__plan0.sql | 23 +- ..._with_time_constraint__plan0_optimized.sql | 21 +- ...t_conversion_metric_with_window__plan0.sql | 21 +- ...on_metric_with_window__plan0_optimized.sql | 21 +- ...with_window_and_time_constraint__plan0.sql | 25 +- ...w_and_time_constraint__plan0_optimized.sql | 23 +- .../test_conversion_metric__query_output.txt | 18 +- ...rsion_metric_with_window__query_output.txt | 18 +- ...nversion_count_with_no_group_by__plan0.sql | 15 +- ...ount_with_no_group_by__plan0_optimized.sql | 15 +- ...timespine_and_fill_nulls_with_0__plan0.sql | 17 +- ...and_fill_nulls_with_0__plan0_optimized.sql | 17 +- .../test_conversion_rate__plan0.sql | 15 +- .../test_conversion_rate__plan0_optimized.sql | 15 +- ...n_rate_with_constant_properties__plan0.sql | 21 +- ...h_constant_properties__plan0_optimized.sql | 21 +- ...onversion_rate_with_no_group_by__plan0.sql | 17 +- ...rate_with_no_group_by__plan0_optimized.sql | 17 +- ...est_conversion_rate_with_window__plan0.sql | 17 +- ...sion_rate_with_window__plan0_optimized.sql | 17 +- ..._metric_with_non_default_grains__plan0.sql | 5 +- ...th_non_default_grains__plan0_optimized.sql | 9 +- ..._no_window_with_time_constraint__plan0.sql | 11 +- ..._with_time_constraint__plan0_optimized.sql | 10 +- ...c_with_agg_time_and_metric_time__plan0.sql | 13 +- ..._time_and_metric_time__plan0_optimized.sql | 13 +- ..._metric_with_agg_time_dimension__plan0.sql | 13 +- ...th_agg_time_dimension__plan0_optimized.sql | 13 +- ...th_multiple_agg_time_dimensions__plan0.sql | 13 +- ...e_agg_time_dimensions__plan0_optimized.sql | 13 +- ...multiple_metric_time_dimensions__plan0.sql | 13 +- ...etric_time_dimensions__plan0_optimized.sql | 13 +- ...with_non_adjustable_time_filter__plan0.sql | 15 +- ...djustable_time_filter__plan0_optimized.sql | 15 +- ...e_metric_with_non_default_grain__plan0.sql | 5 +- ...ith_non_default_grain__plan0_optimized.sql | 9 +- ...ive_metric_with_time_constraint__plan0.sql | 19 +- ..._with_time_constraint__plan0_optimized.sql | 18 +- ..._metric_with_non_default_grains__plan0.sql | 13 +- ...th_non_default_grains__plan0_optimized.sql | 13 +- ...e_metric_with_non_default_grain__plan0.sql | 13 +- ...ith_non_default_grain__plan0_optimized.sql | 13 +- ..._metric_with_non_default_grains__plan0.sql | 13 +- ...th_non_default_grains__plan0_optimized.sql | 13 +- ...w_metric_with_non_default_grain__plan0.sql | 13 +- ...ith_non_default_grain__plan0_optimized.sql | 13 +- ..._metric_with_non_default_grains__plan0.sql | 13 +- ...th_non_default_grains__plan0_optimized.sql | 13 +- ..._metric_with_custom_granularity__plan0.sql | 17 +- ...th_custom_granularity__plan0_optimized.sql | 17 +- ..._with_custom_granularity_filter__plan0.sql | 21 +- ...om_granularity_filter__plan0_optimized.sql | 21 +- ...nularity_filter_not_in_group_by__plan0.sql | 21 +- ...ilter_not_in_group_by__plan0_optimized.sql | 21 +- ..._metric_with_custom_granularity__plan0.sql | 13 +- ...th_custom_granularity__plan0_optimized.sql | 13 +- ..._with_custom_granularity_filter__plan0.sql | 4 +- ...om_granularity_filter__plan0_optimized.sql | 4 +- ...nularity_filter_not_in_group_by__plan0.sql | 4 +- ...ilter_not_in_group_by__plan0_optimized.sql | 4 +- ..._with_custom_granularity_filter__plan0.sql | 2 +- ...om_granularity_filter__plan0_optimized.sql | 2 +- ...nularity_in_filter_and_group_by__plan0.sql | 2 +- ...n_filter_and_group_by__plan0_optimized.sql | 2 +- ...nularity_filter_not_in_group_by__plan0.sql | 2 +- ...ilter_not_in_group_by__plan0_optimized.sql | 2 +- ..._with_custom_granularity_filter__plan0.sql | 2 +- ...om_granularity_filter__plan0_optimized.sql | 2 +- ...nularity_in_filter_and_group_by__plan0.sql | 2 +- ...n_filter_and_group_by__plan0_optimized.sql | 2 +- .../test_build_saved_query_tasks__query0.sql | 2 +- ...o_from_multiple_semantic_models__plan0.sql | 2 +- ...tiple_semantic_models__plan0_optimized.sql | 2 +- ...atio_from_single_semantic_model__plan0.sql | 2 +- ...single_semantic_model__plan0_optimized.sql | 2 +- .../test_constrain_time_range_node__plan0.sql | 2 +- ...train_time_range_node__plan0_optimized.sql | 2 +- ...on_with_joined_where_constraint__plan0.sql | 2 +- ...ined_where_constraint__plan0_optimized.sql | 2 +- ...lter_with_where_constraint_node__plan0.sql | 2 +- ...where_constraint_node__plan0_optimized.sql | 2 +- ...set_metric_with_time_constraint__plan0.sql | 15 +- ..._with_time_constraint__plan0_optimized.sql | 15 +- ...offset_to_grain_and_granularity__plan0.sql | 2 +- ...grain_and_granularity__plan0_optimized.sql | 2 +- ...offset_to_grain_and_granularity__plan0.sql | 2 +- ...grain_and_granularity__plan0_optimized.sql | 2 +- ...h_offset_window_and_time_filter__plan0.sql | 4 +- ...indow_and_time_filter__plan0_optimized.sql | 4 +- ...erived_offset_cumulative_metric__plan0.sql | 13 +- ...set_cumulative_metric__plan0_optimized.sql | 13 +- ...d_where_constraint_not_selected__plan0.sql | 2 +- ...nstraint_not_selected__plan0_optimized.sql | 2 +- .../Clickhouse/test_nested_filters__plan0.sql | 6 +- .../test_nested_filters__plan0_optimized.sql | 4 +- ...ed_offsets_with_time_constraint__plan0.sql | 2 +- ..._with_time_constraint__plan0_optimized.sql | 2 +- ...d_offsets_with_where_constraint__plan0.sql | 2 +- ...with_where_constraint__plan0_optimized.sql | 2 +- ...ry_have_different_granularities__plan0.sql | 4 +- ...fferent_granularities__plan0_optimized.sql | 4 +- ...ry_have_different_granularities__plan0.sql | 4 +- ...fferent_granularities__plan0_optimized.sql | 4 +- ...set_metric_with_time_constraint__plan0.sql | 2 +- ..._with_time_constraint__plan0_optimized.sql | 2 +- ...values_with_a_join_and_a_filter__plan0.sql | 2 +- ...h_a_join_and_a_filter__plan0_optimized.sql | 2 +- .../test_cast_to_timestamp__plan0.sql | 2 +- ...ith_0_multi_metric_query__query_output.txt | 14 +- ...th_categorical_dimension__query_output.txt | 29 +- ...custom_grain_in_group_by__query_output.txt | 32 +- ...h_filter_not_in_group_by__query_output.txt | 6 +- ..._group_by_using_agg_time__query_output.txt | 6 +- ...agg_time_and_metric_time__query_output.txt | 6 +- ...y_filter_not_in_group_by__query_output.txt | 2002 ++++++++--------- ...imple_join_to_time_spine__query_output.txt | 82 +- .../test_cumulative_fill_nulls__plan0.sql | 13 +- ...cumulative_fill_nulls__plan0_optimized.sql | 13 +- ...ine_with_filter_not_in_group_by__plan0.sql | 4 +- ...ilter_not_in_group_by__plan0_optimized.sql | 4 +- ..._not_in_group_by_using_agg_time__plan0.sql | 4 +- ...oup_by_using_agg_time__plan0_optimized.sql | 4 +- ..._using_agg_time_and_metric_time__plan0.sql | 4 +- ..._time_and_metric_time__plan0_optimized.sql | 4 +- ...th_filter_smaller_than_group_by__plan0.sql | 4 +- ...smaller_than_group_by__plan0_optimized.sql | 4 +- ...join_to_time_spine_with_filters__plan0.sql | 10 +- ...me_spine_with_filters__plan0_optimized.sql | 10 +- ...cumulative_grain_to_date_metric__plan0.sql | 13 +- ..._grain_to_date_metric__plan0_optimized.sql | 13 +- ...bdaily_cumulative_window_metric__plan0.sql | 13 +- ...ulative_window_metric__plan0_optimized.sql | 13 +- ...ily_time_constraint_with_metric__plan0.sql | 6 +- ...onstraint_with_metric__plan0_optimized.sql | 6 +- ...time_constraint_without_metrics__plan0.sql | 2 +- ...raint_without_metrics__plan0_optimized.sql | 2 +- ...h_metric_in_where_filter__query_output.txt | 14 +- ...values_query_with_metric_filter__plan0.sql | 2 +- ...ry_with_metric_filter__plan0_optimized.sql | 2 +- ...emantic_model_as_queried_metric__plan0.sql | 2 +- ...del_as_queried_metric__plan0_optimized.sql | 2 +- ...t_filter_with_conversion_metric__plan0.sql | 17 +- ...ith_conversion_metric__plan0_optimized.sql | 17 +- ...roup_by_has_local_entity_prefix__plan0.sql | 2 +- ...s_local_entity_prefix__plan0_optimized.sql | 2 +- .../test_inner_query_multi_hop__plan0.sql | 2 +- ...inner_query_multi_hop__plan0_optimized.sql | 2 +- .../test_inner_query_single_hop__plan0.sql | 4 +- ...nner_query_single_hop__plan0_optimized.sql | 4 +- .../test_metric_filtered_by_itself__plan0.sql | 2 +- ...ic_filtered_by_itself__plan0_optimized.sql | 2 +- ...ric_with_metric_in_where_filter__plan0.sql | 2 +- ...etric_in_where_filter__plan0_optimized.sql | 2 +- ...mulative_metric_in_where_filter__plan0.sql | 2 +- ...etric_in_where_filter__plan0_optimized.sql | 2 +- ..._derived_metric_in_where_filter__plan0.sql | 2 +- ...etric_in_where_filter__plan0_optimized.sql | 2 +- ...with_multiple_metrics_in_filter__plan0.sql | 2 +- ...ple_metrics_in_filter__plan0_optimized.sql | 2 +- ...th_ratio_metric_in_where_filter__plan0.sql | 4 +- ...etric_in_where_filter__plan0_optimized.sql | 4 +- ...h_simple_metric_in_where_filter__plan0.sql | 2 +- ...etric_in_where_filter__plan0_optimized.sql | 2 +- ...dimensions_with_time_constraint__plan0.sql | 2 +- ..._with_time_constraint__plan0_optimized.sql | 2 +- ...conversion_metric_query_filters__plan0.sql | 21 +- ..._metric_query_filters__plan0_optimized.sql | 21 +- ..._metric_with_query_time_filters__plan0.sql | 15 +- ...th_query_time_filters__plan0_optimized.sql | 15 +- ...re_source_categorical_dimension__plan0.sql | 4 +- ...categorical_dimension__plan0_optimized.sql | 4 +- ...spine_metric_predicate_pushdown__plan0.sql | 4 +- ...ic_predicate_pushdown__plan0_optimized.sql | 4 +- ...ic_time_filter_with_two_targets__plan0.sql | 2 +- ...lter_with_two_targets__plan0_optimized.sql | 2 +- ..._categorical_dimension_pushdown__plan0.sql | 2 +- ...al_dimension_pushdown__plan0_optimized.sql | 2 +- ..._metric_with_query_time_filters__plan0.sql | 4 +- ...th_query_time_filters__plan0_optimized.sql | 4 +- ...ry_with_metric_joins_and_filter__plan0.sql | 10 +- ...tric_joins_and_filter__plan0_optimized.sql | 6 +- ...ine_pushdown_filter_application__plan0.sql | 4 +- ...wn_filter_application__plan0_optimized.sql | 4 +- ..._categorical_dimension_pushdown__plan0.sql | 2 +- ...al_dimension_pushdown__plan0_optimized.sql | 2 +- .../test_skipped_pushdown__plan0.sql | 2 +- ...test_skipped_pushdown__plan0_optimized.sql | 2 +- .../test_distinct_values__plan0.sql | 2 +- .../test_distinct_values__plan0_optimized.sql | 2 +- ...th_where_constraint_on_join_dim__plan0.sql | 2 +- ...onstraint_on_join_dim__plan0_optimized.sql | 2 +- .../test_join_to_scd_dimension__plan0.sql | 21 +- ...join_to_scd_dimension__plan0_optimized.sql | 21 +- .../test_measure_constraint__plan0.sql | 4 +- ...st_measure_constraint__plan0_optimized.sql | 2 +- ..._constraint_with_reused_measure__plan0.sql | 4 +- ...t_with_reused_measure__plan0_optimized.sql | 4 +- ...aint_with_single_expr_and_alias__plan0.sql | 2 +- ...single_expr_and_alias__plan0_optimized.sql | 2 +- ..._multiple_sources_no_dimensions__plan0.sql | 2 +- ...sources_no_dimensions__plan0_optimized.sql | 2 +- ...multi_hop_through_scd_dimension__plan0.sql | 19 +- ...through_scd_dimension__plan0_optimized.sql | 19 +- ...test_multi_hop_to_scd_dimension__plan0.sql | 19 +- ..._hop_to_scd_dimension__plan0_optimized.sql | 19 +- ..._multiple_metrics_no_dimensions__plan0.sql | 4 +- ...metrics_no_dimensions__plan0_optimized.sql | 4 +- .../Clickhouse/test_render_where__plan0.sql | 2 +- ...e_with_input_measure_constraint__plan0.sql | 4 +- ...ut_measure_constraint__plan0_optimized.sql | 4 +- ...ne_with_queried_time_constraint__plan0.sql | 6 +- ...eried_time_constraint__plan0_optimized.sql | 6 +- ..._join_to_time_spine_with_filter__plan0.sql | 2 +- ...ime_spine_with_filter__plan0_optimized.sql | 2 +- ..._time_spine_with_queried_filter__plan0.sql | 4 +- ...e_with_queried_filter__plan0_optimized.sql | 4 +- 233 files changed, 2086 insertions(+), 2196 deletions(-) delete mode 100644 local-data-warehouses/clickhouse/config.xml diff --git a/local-data-warehouses/clickhouse/config.xml b/local-data-warehouses/clickhouse/config.xml deleted file mode 100644 index 9aed3fda30..0000000000 --- a/local-data-warehouses/clickhouse/config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 1 - - - \ No newline at end of file diff --git a/local-data-warehouses/clickhouse/docker-compose.yaml b/local-data-warehouses/clickhouse/docker-compose.yaml index 209f717127..b2e3b7ae77 100644 --- a/local-data-warehouses/clickhouse/docker-compose.yaml +++ b/local-data-warehouses/clickhouse/docker-compose.yaml @@ -14,5 +14,3 @@ services: CLICKHOUSE_USER: "metricflow" CLICKHOUSE_PASSWORD: "metricflowing" CLICKHOUSE_DB: "metricflow" - volumes: - - ./config.xml:/etc/clickhouse-server/config.d/config.xml \ No newline at end of file diff --git a/metricflow/sql/render/clickhouse.py b/metricflow/sql/render/clickhouse.py index bd01bb9bbb..ae305e932e 100644 --- a/metricflow/sql/render/clickhouse.py +++ b/metricflow/sql/render/clickhouse.py @@ -44,8 +44,13 @@ class ClickhouseSqlExpressionRenderer(DefaultSqlExpressionRenderer): @property @override def double_data_type(self) -> str: - """Custom double data type for the Clickhouse engine.""" - return "DOUBLE PRECISION" + """Custom double data type for the Clickhouse engine. It needs to be nullable so null values can be cast to NULL""" + return "Nullable(DOUBLE PRECISION)" + + @property + @override + def timestamp_data_type(self) -> str: + return "Nullable(TIMESTAMP)" @property @override @@ -124,7 +129,7 @@ def visit_cast_to_timestamp_expr(self, node: SqlCastToTimestampExpression) -> Sq # For timestamp casting, use toDateTime return SqlExpressionRenderResult( - sql=f"toDateTime({arg_rendered.sql})", + sql=f"toDateTime64({arg_rendered.sql}, 3)", bind_parameter_set=arg_rendered.bind_parameter_set, ) @@ -132,7 +137,6 @@ def visit_cast_to_timestamp_expr(self, node: SqlCastToTimestampExpression) -> Sq def visit_date_trunc_expr(self, node: SqlDateTruncExpression) -> SqlExpressionRenderResult: self._validate_granularity_for_engine(node.time_granularity) - """Handle date truncation expressions properly.""" arg_rendered = self.render_sql_expr(node.arg) # Map the granularity to Clickhouse's date truncation functions @@ -143,11 +147,18 @@ def visit_date_trunc_expr(self, node: SqlDateTruncExpression) -> SqlExpressionRe TimeGranularity.QUARTER: "quarter", TimeGranularity.YEAR: "year", TimeGranularity.HOUR: "hour", - TimeGranularity.MILLISECOND: "milisecond", TimeGranularity.SECOND: "second", - TimeGranularity.MINUTE: "minute" + TimeGranularity.MINUTE: "minute", + TimeGranularity.MILLISECOND: "millisecond", }[node.time_granularity] + # For millisecond precision, we need to cast to DateTime64 + if node.time_granularity == TimeGranularity.MILLISECOND: + return SqlExpressionRenderResult( + sql=f"date_trunc('{trunc_function}', CAST({arg_rendered.sql} AS DateTime64(3)))", + bind_parameter_set=arg_rendered.bind_parameter_set, + ) + return SqlExpressionRenderResult( sql=f"date_trunc('{trunc_function}', {arg_rendered.sql})", bind_parameter_set=arg_rendered.bind_parameter_set, @@ -242,141 +253,111 @@ class ClickhouseSqlQueryPlanRenderer(DefaultSqlQueryPlanRenderer): def expr_renderer(self) -> SqlExpressionRenderer: return self.EXPR_RENDERER + @override + def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: + if not join_descriptions: + return None + + params = SqlBindParameterSet() + join_section_lines = [] + + for join_description in join_descriptions: + right_source_rendered = self._render_node(join_description.right_source) + params = params.merge(right_source_rendered.bind_parameter_set) + + join_type = join_description.join_type.value + + # Render the on condition + on_condition_rendered: Optional[SqlExpressionRenderResult] = None + if join_description.on_condition: + on_condition_rendered = self.EXPR_RENDERER.render_sql_expr(join_description.on_condition) + params = params.merge(on_condition_rendered.bind_parameter_set) + + if on_condition_rendered: + conditions = on_condition_rendered.sql.split(' AND ') + equality_conditions = [] + inequality_conditions = [] + + for condition in conditions: + if self._is_inequality_join(condition): + inequality_conditions.append(condition) + else: + equality_conditions.append(condition) + + if inequality_conditions: + # Store inequality conditions for WHERE clause + self._stored_where_conditions.extend(inequality_conditions) + # Update ON clause to only include equality conditions + if equality_conditions: + on_condition_rendered = SqlExpressionRenderResult( + sql=' AND '.join(equality_conditions), + bind_parameter_set=on_condition_rendered.bind_parameter_set + ) + else: + on_condition_rendered = None + join_type = "CROSS JOIN" + + # Rest of join rendering logic... + if join_description.right_source.as_sql_table_node is not None: + join_section_lines.append(join_type) + join_section_lines.append( + textwrap.indent( + f"{right_source_rendered.sql} {join_description.right_source_alias}", + prefix=SqlRenderingConstants.INDENT, + ) + ) + else: + join_section_lines.append(f"{join_type} (") + join_section_lines.append( + textwrap.indent(right_source_rendered.sql, prefix=SqlRenderingConstants.INDENT) + ) + join_section_lines.append(f") {join_description.right_source_alias}") + + if on_condition_rendered: + join_section_lines.append("ON") + join_section_lines.append( + textwrap.indent(on_condition_rendered.sql, prefix=SqlRenderingConstants.INDENT) + ) + + return SqlPlanRenderResult("\n".join(join_section_lines), params) + @override + def _render_where(self, where_expression: Optional[SqlExpressionNode]) -> Optional[SqlPlanRenderResult]: + """Combines original WHERE clause with stored join conditions.""" + original_where = super()._render_where(where_expression) + stored_conditions = getattr(self, '_stored_where_conditions', []) or [] - # - # @override - # def _render_where(self, where_expression: Optional[SqlExpressionNode]) -> Optional[SqlPlanRenderResult]: - # """Override to combine stored where conditions from joins with the main where clause.""" - # original_where = super()._render_where(where_expression) - # stored_conditions = getattr(self, '_stored_where_conditions', []) - # - # # Clear stored conditions to prevent them from being used multiple times - # self._stored_where_conditions = [] - # - # if not stored_conditions and not original_where: - # return None - # - # conditions = [] - # - # # Add original where condition if it exists - # if original_where: - # # Strip the "WHERE" prefix if it exists - # where_sql = original_where.sql - # if where_sql.upper().startswith('WHERE '): - # where_sql = where_sql[6:] - # conditions.append(where_sql) - # - # # Add stored conditions from joins (only unique conditions) - # seen_conditions = set() - # for condition in stored_conditions: - # if condition not in seen_conditions: - # conditions.append(condition) - # seen_conditions.add(condition) - # - # # Combine all conditions with AND - # combined_sql = ' AND '.join(f'({condition})' for condition in conditions if condition.strip()) - # - # return SqlPlanRenderResult( - # sql=f"WHERE {combined_sql}" if combined_sql else "", - # bind_parameter_set=original_where.bind_parameter_set if original_where else SqlBindParameterSet(), - # ) - # - # - # @override - # def _render_joins_section(self, join_descriptions: Sequence[SqlJoinDescription]) -> Optional[SqlPlanRenderResult]: - # """Convert the join descriptions into a "JOIN" section with ClickHouse-specific handling. - # - # Args: - # join_descriptions: Sequence of join descriptions to render - # - # Returns: - # SqlPlanRenderResult with the rendered JOIN section, or None if no joins - # """ - # if not join_descriptions: - # return None - # - # params = SqlBindParameterSet() - # join_section_lines = [] - # where_conditions = [] - # - # for join_description in join_descriptions: - # join_lines, join_params, join_where_conditions = self._render_single_join(join_description) - # join_section_lines.extend(join_lines) - # params = params.merge(join_params) - # where_conditions.extend(join_where_conditions) - # - # # Store where conditions for use in _render_where_section - # if where_conditions: - # self._stored_where_conditions = where_conditions - # - # return SqlPlanRenderResult("\n".join(join_section_lines), params) - # - # def _render_single_join(self, join_description: SqlJoinDescription) -> tuple[list[str], SqlBindParameterSet, list[str]]: - # """Renders a single join description.""" - # join_lines = [] - # where_conditions = [] - # params = SqlBindParameterSet() - # - # # Render the right source - # right_source_rendered = self._render_node(join_description.right_source) - # params = params.merge(right_source_rendered.bind_parameter_set) - # - # # Render the ON condition if present - # on_condition = self._render_join_condition(join_description.on_condition) - # if on_condition: - # on_condition = SqlExpressionRenderResult( - # sql=on_condition.sql, - # bind_parameter_set=on_condition.bind_parameter_set - # ) - # params = params.merge(on_condition.bind_parameter_set) - # - # # Add join type and source - # join_lines.append(join_description.join_type.value) - # source_lines = self.__render_join_source( - # right_source_rendered.sql, - # join_description.right_source_alias, - # join_description.right_source.as_sql_table_node is not None - # ) - # join_lines.extend(source_lines) - # - # # Always add ON clause for Clickhouse, even for inequality joins - # if on_condition: - # if self.__is_inequality_join(on_condition.sql): - # # For inequality joins, use a simple 1=1 in ON clause and move real condition to WHERE - # join_lines.extend(["ON", textwrap.indent("1 = 1", prefix=SqlRenderingConstants.INDENT)]) - # where_conditions.append(on_condition.sql) - # else: - # join_lines.extend(["ON", textwrap.indent(on_condition.sql, prefix=SqlRenderingConstants.INDENT)]) - # - # return join_lines, params, where_conditions - # - # def _render_join_condition(self, condition: Optional[SqlExpressionNode]) -> Optional[SqlExpressionRenderResult]: - # """Renders the JOIN's ON condition if present.""" - # if condition: - # return self.EXPR_RENDERER.render_sql_expr(condition) - # return None - # - # def __get_join_type(self, original_type: SqlJoinType, on_condition: Optional[SqlExpressionRenderResult]) -> SqlJoinType: - # """Determines the final join type, converting to CROSS JOIN for time-range joins.""" - # if on_condition and self.__is_inequality_join(on_condition.sql): - # return SqlJoinType.CROSS_JOIN - # return original_type - # - # @staticmethod - # def __is_inequality_join(condition_sql: str) -> bool: - # """Checks if a join condition contains time range operators.""" - # inequality_operators = ["<=", ">=", "<", ">"] - # return any(op in condition_sql for op in inequality_operators) - # - # @staticmethod - # def __render_join_source(source_sql: str, alias: str, is_table: bool) -> list[str]: - # """Renders the join's source table or subquery with proper indentation.""" - # if is_table: - # return [textwrap.indent(f"{source_sql} AS {alias.lower()}", prefix=SqlRenderingConstants.INDENT)] - # - # return [ - # "(", - # textwrap.indent(source_sql, prefix=SqlRenderingConstants.INDENT), - # f") AS {alias.lower()}" # Force lowercase here too - # ] \ No newline at end of file + # Clear stored conditions to prevent them from being used multiple times + self._stored_where_conditions = [] + + if not stored_conditions and not original_where: + return None + + conditions = [] + params = SqlBindParameterSet() + + # Add original where condition if it exists + if original_where: + where_sql = original_where.sql + if where_sql.upper().startswith('WHERE '): + where_sql = where_sql[6:] + conditions.append(where_sql) + params = params.merge(original_where.bind_parameter_set) + + # Add stored conditions from joins + conditions.extend(stored_conditions) + + # Combine all conditions with AND + combined_sql = ' AND '.join(f'({condition})' for condition in conditions if condition.strip()) + + return SqlPlanRenderResult( + sql=f"WHERE {combined_sql}" if combined_sql else "", + bind_parameter_set=params, + ) + + def _is_inequality_join(self, condition_sql: str) -> bool: + """Checks if a join condition contains inequality operators.""" + # Add support for combined conditions with AND + parts = condition_sql.split(' AND ') + inequality_operators = ["<=", ">=", "<", ">"] + return any(any(op in part for op in inequality_operators) for part in parts) \ No newline at end of file diff --git a/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml index 690d8ed121..15198571eb 100644 --- a/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml +++ b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml @@ -89,3 +89,5 @@ clickhouse: password: "{{ env_var('DBT_ENV_SECRET_PASSWORD') }}" schema: "{{ env_var('DBT_ENV_SECRET_SCHEMA') }}" secure: false + custom_settings: + join_use_nulls: 1 diff --git a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py index 33a53c1fc0..49aaba9325 100644 --- a/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py +++ b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py @@ -50,7 +50,7 @@ def create_table_from_data_table( if self.sql_engine_type == SqlEngine.CLICKHOUSE: create_table_statement = ( - f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(' ')[0]})" + f"{create_table_statement} ENGINE = MergeTree ORDER BY ({columns_to_insert[0].split(' ')[0]}) SETTINGS allow_nullable_key = 1" ) self._adapter.execute( diff --git a/tests_metricflow/integration/test_cases/itest_granularity.yaml b/tests_metricflow/integration/test_cases/itest_granularity.yaml index 932c9559a3..0eb7e1fd83 100644 --- a/tests_metricflow/integration/test_cases/itest_granularity.yaml +++ b/tests_metricflow/integration/test_cases/itest_granularity.yaml @@ -573,7 +573,7 @@ integration_test: ts.martian_day AS metric_time__martian_day , SUM(1) AS visits FROM {{ source_schema }}.fct_visits v - LEFT OUTER JOIN {{ source_schema }}.mf_time_spine ts ON {{ render_date_trunc("V.ds", TimeGranularity.DAY) }} = ts.ds + LEFT OUTER JOIN {{ source_schema }}.mf_time_spine ts ON {{ render_date_trunc("v.ds", TimeGranularity.DAY) }} = ts.ds GROUP BY ts.martian_day ) subq_5 FULL OUTER JOIN ( @@ -649,7 +649,7 @@ integration_test: ts.martian_day AS metric_time__martian_day , SUM(1) AS visits FROM {{ source_schema }}.fct_visits v - LEFT OUTER JOIN {{ source_schema }}.mf_time_spine ts ON {{ render_date_trunc("V.ds", TimeGranularity.DAY) }} = ts.ds + LEFT OUTER JOIN {{ source_schema }}.mf_time_spine ts ON {{ render_date_trunc("v.ds", TimeGranularity.DAY) }} = ts.ds GROUP BY ts.martian_day ) subq_5 FULL OUTER JOIN ( diff --git a/tests_metricflow/integration/test_cases/itest_metrics.yaml b/tests_metricflow/integration/test_cases/itest_metrics.yaml index 5ba48321aa..f986fef55f 100644 --- a/tests_metricflow/integration/test_cases/itest_metrics.yaml +++ b/tests_metricflow/integration/test_cases/itest_metrics.yaml @@ -731,7 +731,7 @@ integration_test: GROUP BY ds ) d - ON {{ render_date_sub("C", "ds", 14, TimeGranularity.DAY) }} = d.metric_time__day + ON {{ render_date_sub("c", "ds", 14, TimeGranularity.DAY) }} = d.metric_time__day ) b ON a.metric_time__day = b.metric_time__day --- @@ -1828,7 +1828,7 @@ integration_test: GROUP BY ds ) d - ON {{ render_date_sub("C", "ds", 14, TimeGranularity.DAY) }} = d.booking__ds__day + ON {{ render_date_sub("c", "ds", 14, TimeGranularity.DAY) }} = d.booking__ds__day ) b ON a.booking__ds__day = b.booking__ds__day --- @@ -2183,7 +2183,7 @@ integration_test: , SUM(1) AS bookings FROM {{ source_schema }}.fct_bookings WHERE is_instant - GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }} + GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }} as ds ) a ON b.ds = a.ds --- integration_test: @@ -2206,7 +2206,7 @@ integration_test: , SUM(1) AS bookings FROM {{ source_schema }}.fct_bookings WHERE is_instant - GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }}, is_instant + GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }} as ds, is_instant ) a ON b.ds = a.ds WHERE is_instant --- @@ -2240,7 +2240,7 @@ integration_test: , SUM(1) AS bookings FROM {{ source_schema }}.fct_bookings WHERE {{ render_time_constraint("ds", "2020-01-03", "2020-01-03") }} - GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }} + GROUP BY {{ render_date_trunc("ds", TimeGranularity.DAY) }} as ds ) a ON b.ds = a.ds WHERE {{ render_time_constraint("b.ds", "2020-01-03", "2020-01-03") }} --- @@ -2255,7 +2255,7 @@ integration_test: {{ render_date_trunc("last_profile_edit_ts", TimeGranularity.MILLISECOND) }} AS user__last_profile_edit_ts__millisecond , SUM(1) AS new_users FROM {{ source_schema }}.dim_users - GROUP BY {{ render_date_trunc("last_profile_edit_ts", TimeGranularity.MILLISECOND) }} + GROUP BY {{ render_date_trunc("last_profile_edit_ts", TimeGranularity.MILLISECOND) }} AS user__last_profile_edit_ts__millisecond --- integration_test: name: simple_metric_with_joined_sub_daily_dimension diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql index 2c72026ce2..103c6323f6 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0.sql @@ -7,7 +7,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_16.metric_time__day - , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -148,7 +148,7 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_2 ) subq_3 GROUP BY @@ -330,10 +330,10 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_5 ) subq_6 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -490,12 +490,11 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON - ( - subq_8.user = subq_11.user - ) AND ( - (subq_8.metric_time__day <= subq_11.metric_time__day) - ) + WHERE (( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql index a5b7c0dab1..09f07baf65 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -39,7 +39,7 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_18 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') GROUP BY metric_time__day ) subq_21 @@ -94,9 +94,9 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_22 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -107,12 +107,11 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON - ( - subq_24.user = subq_27.user - ) AND ( - (subq_24.metric_time__day <= subq_27.metric_time__day) - ) + WHERE (( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + )) ) subq_28 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql index 7d38e99c61..fe1eba568b 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_16.metric_time__day , subq_16.visit__referrer_id - , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -152,7 +152,7 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_2 ) subq_3 GROUP BY @@ -347,10 +347,10 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_5 ) subq_6 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -507,12 +507,11 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON - ( - subq_8.user = subq_11.user - ) AND ( - (subq_8.metric_time__day <= subq_11.metric_time__day) - ) + WHERE (( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql index 5a26d4087b..a9da27b4fa 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_categorical_filter__plan0_optimized.sql @@ -19,7 +19,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day , visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -44,7 +44,7 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_18 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') GROUP BY metric_time__day , visit__referrer_id @@ -111,9 +111,9 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_22 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -124,12 +124,11 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON - ( - subq_24.user = subq_27.user - ) AND ( - (subq_24.metric_time__day <= subq_27.metric_time__day) - ) + WHERE (( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + )) ) subq_28 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql index 1266cc37d5..9f024c52cb 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0.sql @@ -6,7 +6,7 @@ sql_engine: Clickhouse --- -- Compute Metrics via Expressions SELECT - CAST(subq_14.buys_month AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_with_monthly_conversion + CAST(subq_14.buys_month AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_14.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_with_monthly_conversion FROM ( -- Combine Aggregated Outputs SELECT @@ -233,7 +233,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -378,16 +378,15 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON + WHERE (( + subq_6.user = subq_9.user + ) AND ( ( - subq_6.user = subq_9.user + subq_6.metric_time__month <= subq_9.metric_time__month ) AND ( - ( - subq_6.metric_time__month <= subq_9.metric_time__month - ) AND ( - subq_6.metric_time__month > DATEADD(month, -1, subq_9.metric_time__month) - ) + subq_6.metric_time__month > DATEADD(month, -1, subq_9.metric_time__month) ) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql index 1c3ad91d25..77575d7782 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_different_time_dimension_grains__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28019_cte AS ( ) SELECT - CAST(MAX(subq_27.buys_month) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_18.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_with_monthly_conversion + CAST(MAX(subq_27.buys_month) AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(MAX(subq_18.visits), 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_with_monthly_conversion FROM ( -- Read From CTE For node_id=sma_28019 -- Pass Only Elements: ['visits',] @@ -62,7 +62,7 @@ CROSS JOIN ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys_month AS buys_month FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds_month' -- Add column with generated UUID @@ -73,15 +73,14 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( ( - sma_28019_cte.user = subq_23.user + sma_28019_cte.metric_time__month <= subq_23.metric_time__month ) AND ( - ( - sma_28019_cte.metric_time__month <= subq_23.metric_time__month - ) AND ( - sma_28019_cte.metric_time__month > DATEADD(month, -1, subq_23.metric_time__month) - ) + sma_28019_cte.metric_time__month > DATEADD(month, -1, subq_23.metric_time__month) ) + )) ) subq_24 ) subq_27 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql index 6e5baf6a89..494ee56d37 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0.sql @@ -6,7 +6,7 @@ sql_engine: Clickhouse --- -- Compute Metrics via Expressions SELECT - CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -144,7 +144,7 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_2 ) subq_3 ) subq_4 @@ -322,10 +322,10 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_5 ) subq_6 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -482,12 +482,11 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON - ( - subq_8.user = subq_11.user - ) AND ( - (subq_8.metric_time__day <= subq_11.metric_time__day) - ) + WHERE (( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql index 96107e5cea..dbb391b8f8 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28019_cte AS ( ) SELECT - CAST(MAX(subq_31.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_21.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + CAST(MAX(subq_31.buys) AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(MAX(subq_21.visits), 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Constrain Output with WHERE -- Pass Only Elements: ['visits',] @@ -32,7 +32,7 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_18 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_21 CROSS JOIN ( -- Find conversions for user within the range of INF @@ -84,9 +84,9 @@ CROSS JOIN ( , visits FROM sma_28019_cte sma_28019_cte ) subq_22 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -97,11 +97,10 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON - ( - subq_24.user = subq_27.user - ) AND ( - (subq_24.metric_time__day <= subq_27.metric_time__day) - ) + WHERE (( + subq_24.user = subq_27.user + ) AND ( + (subq_24.metric_time__day <= subq_27.metric_time__day) + )) ) subq_28 ) subq_31 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql index b1d2300d7c..4000d099cc 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0.sql @@ -144,7 +144,7 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_2 ) subq_3 ) subq_4 @@ -332,10 +332,10 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_5 ) subq_6 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -492,16 +492,15 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON + WHERE (( + subq_8.user = subq_11.user + ) AND ( ( - subq_8.user = subq_11.user + subq_8.metric_time__day <= subq_11.metric_time__day ) AND ( - ( - subq_8.metric_time__day <= subq_11.metric_time__day - ) AND ( - subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) - ) + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) ) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql index 5e43718a21..234e13018f 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_filter_not_in_group_by__plan0_optimized.sql @@ -34,7 +34,7 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_18 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_21 CROSS JOIN ( -- Find conversions for user within the range of 7 day @@ -96,9 +96,9 @@ CROSS JOIN ( , visits FROM sma_28019_cte sma_28019_cte ) subq_22 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -109,15 +109,14 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON + WHERE (( + subq_24.user = subq_27.user + ) AND ( ( - subq_24.user = subq_27.user + subq_24.metric_time__day <= subq_27.metric_time__day ) AND ( - ( - subq_24.metric_time__day <= subq_27.metric_time__day - ) AND ( - subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) - ) + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) ) + )) ) subq_28 ) subq_31 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql index 70339d4f39..9a80622ad7 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0.sql @@ -7,7 +7,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_18.visit__referrer_id - , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(subq_18.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_18.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -192,9 +192,9 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02') ) subq_2 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_3 ) subq_4 GROUP BY @@ -430,12 +430,12 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_6 ) subq_7 - WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02') ) subq_8 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_9 ) subq_10 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -592,12 +592,11 @@ FROM ( ) subq_11 ) subq_12 ) subq_13 - ON - ( - subq_10.user = subq_13.user - ) AND ( - (subq_10.metric_time__day <= subq_13.metric_time__day) - ) + WHERE (( + subq_10.user = subq_13.user + ) AND ( + (subq_10.metric_time__day <= subq_13.metric_time__day) + )) ) subq_14 ) subq_15 ) subq_16 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql index 3187f076d3..9926eac6dc 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_time_constraint__plan0_optimized.sql @@ -15,12 +15,12 @@ WITH ctr_0_cte AS ( , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02') ) SELECT visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -43,7 +43,7 @@ FROM ( , visits FROM ctr_0_cte ctr_0_cte ) subq_21 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') GROUP BY visit__referrer_id ) subq_24 @@ -108,9 +108,9 @@ FROM ( , visits FROM ctr_0_cte ctr_0_cte ) subq_25 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_27 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -121,12 +121,11 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_30 - ON - ( - subq_27.user = subq_30.user - ) AND ( - (subq_27.metric_time__day <= subq_30.metric_time__day) - ) + WHERE (( + subq_27.user = subq_30.user + ) AND ( + (subq_27.metric_time__day <= subq_30.metric_time__day) + )) ) subq_31 GROUP BY visit__referrer_id diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql index c663d67553..4275ef3a65 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0.sql @@ -7,7 +7,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_16.metric_time__day - , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -148,7 +148,7 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_2 ) subq_3 GROUP BY @@ -330,10 +330,10 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_5 ) subq_6 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -490,16 +490,15 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON + WHERE (( + subq_8.user = subq_11.user + ) AND ( ( - subq_8.user = subq_11.user + subq_8.metric_time__day <= subq_11.metric_time__day ) AND ( - ( - subq_8.metric_time__day <= subq_11.metric_time__day - ) AND ( - subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) - ) + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) ) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql index 0dac368c16..0733131f18 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -39,7 +39,7 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_18 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') GROUP BY metric_time__day ) subq_21 @@ -94,9 +94,9 @@ FROM ( , visits FROM sma_28019_cte sma_28019_cte ) subq_22 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -107,16 +107,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON + WHERE (( + subq_24.user = subq_27.user + ) AND ( ( - subq_24.user = subq_27.user + subq_24.metric_time__day <= subq_27.metric_time__day ) AND ( - ( - subq_24.metric_time__day <= subq_27.metric_time__day - ) AND ( - subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) - ) + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) ) + )) ) subq_28 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql index f63a590366..171d12d164 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_18.metric_time__day , subq_18.visit__referrer_id - , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_18.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_18.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -196,9 +196,9 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02') ) subq_2 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_3 ) subq_4 GROUP BY @@ -437,12 +437,12 @@ FROM ( FROM ***************************.fct_visits visits_source_src_28000 ) subq_6 ) subq_7 - WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02') ) subq_8 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_9 ) subq_10 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -599,16 +599,15 @@ FROM ( ) subq_11 ) subq_12 ) subq_13 - ON + WHERE (( + subq_10.user = subq_13.user + ) AND ( ( - subq_10.user = subq_13.user + subq_10.metric_time__day <= subq_13.metric_time__day ) AND ( - ( - subq_10.metric_time__day <= subq_13.metric_time__day - ) AND ( - subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) - ) + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) ) + )) ) subq_14 ) subq_15 ) subq_16 diff --git a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql index 9456dff011..057d1ddd3d 100644 --- a/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metric_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_with_window_and_time_constraint__plan0_optimized.sql @@ -15,13 +15,13 @@ WITH ctr_0_cte AS ( , referrer_id AS visit__referrer_id , 1 AS visits FROM ***************************.fct_visits visits_source_src_28000 - WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' + WHERE (date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02') ) SELECT metric_time__day AS metric_time__day , visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -46,7 +46,7 @@ FROM ( , visits FROM ctr_0_cte ctr_0_cte ) subq_21 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') GROUP BY metric_time__day , visit__referrer_id @@ -113,9 +113,9 @@ FROM ( , visits FROM ctr_0_cte ctr_0_cte ) subq_25 - WHERE visit__referrer_id = 'ref_id_01' + WHERE (visit__referrer_id = 'ref_id_01') ) subq_27 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -126,16 +126,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_30 - ON + WHERE (( + subq_27.user = subq_30.user + ) AND ( ( - subq_27.user = subq_30.user + subq_27.metric_time__day <= subq_30.metric_time__day ) AND ( - ( - subq_27.metric_time__day <= subq_30.metric_time__day - ) AND ( - subq_27.metric_time__day > DATEADD(day, -7, subq_30.metric_time__day) - ) + subq_27.metric_time__day > DATEADD(day, -7, subq_30.metric_time__day) ) + )) ) subq_31 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt index f9411b038c..682f412aca 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric__query_output.txt @@ -3,13 +3,13 @@ test_filename: test_conversion_metrics.py docstring: Test query against a conversion metric. --- -metric_time__day visit_buy_conversion_rate +metric_time__day visit_buy_conversion_rate ------------------- --------------------------- -2020-01-01T00:00:00 0.5 -2020-01-02T00:00:00 0.5 -2020-01-03T00:00:00 0.67 -2020-01-04T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 1 -2020-01-10T00:00:00 1 -2020-01-12T00:00:00 0 +2020-01-01T00:00:00 0.50 +2020-01-02T00:00:00 0.50 +2020-01-03T00:00:00 0.67 +2020-01-04T00:00:00 None +2020-01-06T00:00:00 None +2020-01-07T00:00:00 1.00 +2020-01-10T00:00:00 1.00 +2020-01-12T00:00:00 None diff --git a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt index 48097bce0b..7a14f08d1e 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt +++ b/tests_metricflow/snapshots/test_conversion_metrics.py/str/Clickhouse/test_conversion_metric_with_window__query_output.txt @@ -3,13 +3,13 @@ test_filename: test_conversion_metrics.py docstring: Test query against a conversion metric with a window. --- -metric_time__day visit_buy_conversion_rate_7days +metric_time__day visit_buy_conversion_rate_7days ------------------- --------------------------------- -2020-01-01T00:00:00 0.5 -2020-01-02T00:00:00 0.5 -2020-01-03T00:00:00 0.67 -2020-01-04T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 1 -2020-01-10T00:00:00 1 -2020-01-12T00:00:00 0 +2020-01-01T00:00:00 0.50 +2020-01-02T00:00:00 0.50 +2020-01-03T00:00:00 0.67 +2020-01-04T00:00:00 None +2020-01-06T00:00:00 None +2020-01-07T00:00:00 1.00 +2020-01-10T00:00:00 1.00 +2020-01-12T00:00:00 None diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql index 983845a562..736004704d 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0.sql @@ -233,7 +233,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -390,16 +390,15 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON + WHERE (( + subq_6.user = subq_9.user + ) AND ( ( - subq_6.user = subq_9.user + subq_6.metric_time__day <= subq_9.metric_time__day ) AND ( - ( - subq_6.metric_time__day <= subq_9.metric_time__day - ) AND ( - subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) - ) + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) ) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql index 12f11dc095..39ad6812a6 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_count_with_no_group_by__plan0_optimized.sql @@ -62,7 +62,7 @@ CROSS JOIN ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -73,15 +73,14 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( ( - sma_28019_cte.user = subq_23.user + sma_28019_cte.metric_time__day <= subq_23.metric_time__day ) AND ( - ( - sma_28019_cte.metric_time__day <= subq_23.metric_time__day - ) AND ( - sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) - ) + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) ) + )) ) subq_24 ) subq_27 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql index e46d0c2606..02d2849a74 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql @@ -7,7 +7,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_22.metric_time__day - , CAST(subq_22.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_22.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 + , CAST(subq_22.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_22.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 FROM ( -- Combine Aggregated Outputs SELECT @@ -330,7 +330,7 @@ FROM ( ) subq_8 ) subq_9 ) subq_10 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -487,16 +487,15 @@ FROM ( ) subq_11 ) subq_12 ) subq_13 - ON + WHERE (( + subq_10.user = subq_13.user + ) AND ( ( - subq_10.user = subq_13.user + subq_10.metric_time__day <= subq_13.metric_time__day ) AND ( - ( - subq_10.metric_time__day <= subq_13.metric_time__day - ) AND ( - subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) - ) + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) ) + )) ) subq_14 ) subq_15 ) subq_16 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql index db0dbff827..c7195eddd0 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql @@ -24,7 +24,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days_fill_nulls_with_0 FROM ( -- Combine Aggregated Outputs SELECT @@ -94,7 +94,7 @@ FROM ( , subq_35.mf_internal_uuid AS mf_internal_uuid , subq_35.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -105,16 +105,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_35 - ON + WHERE (( + sma_28019_cte.user = subq_35.user + ) AND ( ( - sma_28019_cte.user = subq_35.user + sma_28019_cte.metric_time__day <= subq_35.metric_time__day ) AND ( - ( - sma_28019_cte.metric_time__day <= subq_35.metric_time__day - ) AND ( - sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_35.metric_time__day) - ) + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_35.metric_time__day) ) + )) ) subq_36 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql index 1b5bf1c69c..77910a61cd 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0.sql @@ -7,7 +7,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_14.visit__referrer_id - , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(subq_14.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_14.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -251,7 +251,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -408,12 +408,11 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON - ( - subq_6.user = subq_9.user - ) AND ( - (subq_6.metric_time__day <= subq_9.metric_time__day) - ) + WHERE (( + subq_6.user = subq_9.user + ) AND ( + (subq_6.metric_time__day <= subq_9.metric_time__day) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql index 38edbd1524..33ea88e102 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate__plan0_optimized.sql @@ -18,7 +18,7 @@ WITH sma_28019_cte AS ( SELECT visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -81,7 +81,7 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -92,12 +92,11 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON - ( - sma_28019_cte.user = subq_23.user - ) AND ( - (sma_28019_cte.metric_time__day <= subq_23.metric_time__day) - ) + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( + (sma_28019_cte.metric_time__day <= subq_23.metric_time__day) + )) ) subq_24 GROUP BY visit__referrer_id diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql index 84991f3ec4..a83d2d5e60 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_14.metric_time__day , subq_14.visit__referrer_id - , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_by_session + , CAST(subq_14.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_14.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_by_session FROM ( -- Combine Aggregated Outputs SELECT @@ -273,7 +273,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -430,18 +430,17 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON + WHERE (( + subq_6.user = subq_9.user + ) AND ( + subq_6.session = subq_9.session_id + ) AND ( ( - subq_6.user = subq_9.user + subq_6.metric_time__day <= subq_9.metric_time__day ) AND ( - subq_6.session = subq_9.session_id - ) AND ( - ( - subq_6.metric_time__day <= subq_9.metric_time__day - ) AND ( - subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) - ) + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) ) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql index 26c195210d..8174e55f1d 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_constant_properties__plan0_optimized.sql @@ -20,7 +20,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day , visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_by_session + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_by_session FROM ( -- Combine Aggregated Outputs SELECT @@ -100,7 +100,7 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -112,18 +112,17 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( + sma_28019_cte.session = subq_23.session_id + ) AND ( ( - sma_28019_cte.user = subq_23.user + sma_28019_cte.metric_time__day <= subq_23.metric_time__day ) AND ( - sma_28019_cte.session = subq_23.session_id - ) AND ( - ( - sma_28019_cte.metric_time__day <= subq_23.metric_time__day - ) AND ( - sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) - ) + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) ) + )) ) subq_24 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql index 8b2707c804..0db75064ca 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0.sql @@ -6,7 +6,7 @@ sql_engine: Clickhouse --- -- Compute Metrics via Expressions SELECT - CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + CAST(subq_14.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_14.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -233,7 +233,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -390,16 +390,15 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON + WHERE (( + subq_6.user = subq_9.user + ) AND ( ( - subq_6.user = subq_9.user + subq_6.metric_time__day <= subq_9.metric_time__day ) AND ( - ( - subq_6.metric_time__day <= subq_9.metric_time__day - ) AND ( - subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) - ) + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) ) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql index e61562f159..3303727937 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_no_group_by__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28019_cte AS ( ) SELECT - CAST(MAX(subq_27.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_18.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + CAST(MAX(subq_27.buys) AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(MAX(subq_18.visits), 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Read From CTE For node_id=sma_28019 -- Pass Only Elements: ['visits',] @@ -62,7 +62,7 @@ CROSS JOIN ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -73,15 +73,14 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( ( - sma_28019_cte.user = subq_23.user + sma_28019_cte.metric_time__day <= subq_23.metric_time__day ) AND ( - ( - sma_28019_cte.metric_time__day <= subq_23.metric_time__day - ) AND ( - sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) - ) + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) ) + )) ) subq_24 ) subq_27 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql index c8a32b325b..b650a43d34 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_14.metric_time__day , subq_14.visit__referrer_id - , CAST(subq_14.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_14.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_14.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_14.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -258,7 +258,7 @@ FROM ( ) subq_4 ) subq_5 ) subq_6 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_8.ds__day @@ -415,16 +415,15 @@ FROM ( ) subq_7 ) subq_8 ) subq_9 - ON + WHERE (( + subq_6.user = subq_9.user + ) AND ( ( - subq_6.user = subq_9.user + subq_6.metric_time__day <= subq_9.metric_time__day ) AND ( - ( - subq_6.metric_time__day <= subq_9.metric_time__day - ) AND ( - subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) - ) + subq_6.metric_time__day > DATEADD(day, -7, subq_9.metric_time__day) ) + )) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql index e24946a723..2068d974a8 100644 --- a/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlPlan/Clickhouse/test_conversion_rate_with_window__plan0_optimized.sql @@ -19,7 +19,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day , visit__referrer_id AS visit__referrer_id - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -86,7 +86,7 @@ FROM ( , subq_23.mf_internal_uuid AS mf_internal_uuid , subq_23.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -97,16 +97,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_23 - ON + WHERE (( + sma_28019_cte.user = subq_23.user + ) AND ( ( - sma_28019_cte.user = subq_23.user + sma_28019_cte.metric_time__day <= subq_23.metric_time__day ) AND ( - ( - sma_28019_cte.metric_time__day <= subq_23.metric_time__day - ) AND ( - sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) - ) + sma_28019_cte.metric_time__day > DATEADD(day, -7, subq_23.metric_time__day) ) + )) ) subq_24 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql index a9b7861f0b..ba3c9c3974 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0.sql @@ -91,7 +91,7 @@ FROM ( , date_trunc('quarter', subq_3.ds) AS metric_time__quarter FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -161,8 +161,7 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - (subq_1.metric_time__day <= subq_2.metric_time__day) + WHERE ((subq_1.metric_time__day <= subq_2.metric_time__day)) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql index 4f344fb2b1..e1e29787e8 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_all_time_metric_with_non_default_grains__plan0_optimized.sql @@ -34,12 +34,11 @@ FROM ( , date_trunc('quarter', subq_12.ds) AS metric_time__quarter , SUM(revenue_src_28000.revenue) AS revenue_all_time FROM ***************************.mf_time_spine subq_12 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + )) GROUP BY metric_time__day , metric_time__week diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql index 01fda575b5..391667b2d3 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0.sql @@ -101,9 +101,9 @@ FROM ( SELECT subq_4.ds AS metric_time__day FROM ***************************.mf_time_spine subq_4 - WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01') ) subq_3 - INNER JOIN ( + CROSS JOIN ( -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] SELECT subq_1.ds__day @@ -212,12 +212,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2000-01-01' AND '2020-01-01' + WHERE (subq_1.metric_time__day BETWEEN '2000-01-01' AND '2020-01-01') ) subq_2 - ON - (subq_2.metric_time__day <= subq_3.metric_time__day) + WHERE ((subq_2.metric_time__day <= subq_3.metric_time__day)) ) subq_5 - WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql index 23d404ed20..e2c6cb3c51 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql @@ -17,9 +17,9 @@ FROM ( SELECT ds AS metric_time__day FROM ***************************.mf_time_spine subq_13 - WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (ds BETWEEN '2020-01-01' AND '2020-01-01') ) subq_12 -INNER JOIN ( +CROSS JOIN ( -- Read Elements From Semantic Model 'revenue' -- Metric Time Dimension 'ds' -- Constrain Time Range to [2000-01-01T00:00:00, 2020-01-01T00:00:00] @@ -27,10 +27,8 @@ INNER JOIN ( date_trunc('day', created_at) AS metric_time__day , revenue AS txn_revenue FROM ***************************.fct_revenue revenue_src_28000 - WHERE date_trunc('day', created_at) BETWEEN '2000-01-01' AND '2020-01-01' + WHERE (date_trunc('day', created_at) BETWEEN '2000-01-01' AND '2020-01-01') ) subq_11 -ON - (subq_11.metric_time__day <= subq_12.metric_time__day) -WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' +WHERE (subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') AND ((subq_11.metric_time__day <= subq_12.metric_time__day)) GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql index cd91d52f8d..5de95b7e0f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0.sql @@ -67,7 +67,7 @@ FROM ( , subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -137,12 +137,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql index c406d18169..aecbb1215f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_and_metric_time__plan0_optimized.sql @@ -13,14 +13,13 @@ SELECT , subq_10.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -INNER JOIN +CROSS JOIN ***************************.fct_revenue revenue_src_28000 -ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) - ) +WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds +) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) +)) GROUP BY revenue_instance__ds__month , metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql index 4e1f2bb68b..0c1d4ddd74 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0.sql @@ -63,7 +63,7 @@ FROM ( subq_3.ds AS revenue_instance__ds__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -133,12 +133,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day - ) AND ( - subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) - ) + WHERE (( + subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day + ) AND ( + subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql index 3b5eecacbf..bae03a08b1 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql @@ -12,13 +12,12 @@ SELECT subq_10.ds AS revenue_instance__ds__day , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -INNER JOIN +CROSS JOIN ***************************.fct_revenue revenue_src_28000 -ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) - ) +WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds +) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) +)) GROUP BY revenue_instance__ds__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql index 75e5f50c21..754ff775e3 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0.sql @@ -67,7 +67,7 @@ FROM ( , date_trunc('month', subq_3.ds) AS revenue_instance__ds__month FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -137,12 +137,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day - ) AND ( - subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) - ) + WHERE (( + subq_1.revenue_instance__ds__day <= subq_2.revenue_instance__ds__day + ) AND ( + subq_1.revenue_instance__ds__day > DATEADD(month, -2, subq_2.revenue_instance__ds__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql index cde9058907..69981afa97 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_agg_time_dimensions__plan0_optimized.sql @@ -13,14 +13,13 @@ SELECT , date_trunc('month', subq_10.ds) AS revenue_instance__ds__month , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -INNER JOIN +CROSS JOIN ***************************.fct_revenue revenue_src_28000 -ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) - ) +WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds +) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) +)) GROUP BY revenue_instance__ds__day , revenue_instance__ds__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql index e9b9214127..b98af15bbc 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0.sql @@ -67,7 +67,7 @@ FROM ( , date_trunc('month', subq_3.ds) AS metric_time__month FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -137,12 +137,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql index a924a5abf8..1fb5a673ce 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_multiple_metric_time_dimensions__plan0_optimized.sql @@ -13,14 +13,13 @@ SELECT , date_trunc('month', subq_10.ds) AS metric_time__month , SUM(revenue_src_28000.revenue) AS trailing_2_months_revenue FROM ***************************.mf_time_spine subq_10 -INNER JOIN +CROSS JOIN ***************************.fct_revenue revenue_src_28000 -ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) - ) +WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_10.ds +) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_10.ds) +)) GROUP BY metric_time__day , metric_time__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql index da7defe266..21633f0cc8 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql @@ -230,7 +230,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -425,14 +425,13 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 - WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' + WHERE (metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07') ) subq_5 ) subq_6 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql index 06238ae8c7..7a1a09f5a8 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql @@ -21,15 +21,14 @@ FROM ( subq_11.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_11 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_11.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_11.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_11.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_11.ds) + )) ) subq_12 -WHERE metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07' +WHERE (metric_time__day = '2020-01-03' or metric_time__day = '2020-01-07') GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql index b24598ff66..0601e706bd 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0.sql @@ -81,7 +81,7 @@ FROM ( , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -151,8 +151,7 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - (subq_1.metric_time__day <= subq_2.metric_time__day) + WHERE ((subq_1.metric_time__day <= subq_2.metric_time__day)) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql index dcf016f957..2f4cf9afe5 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_non_default_grain__plan0_optimized.sql @@ -27,12 +27,11 @@ FROM ( , date_trunc('week', subq_12.ds) AS metric_time__week , SUM(revenue_src_28000.revenue) AS revenue_all_time FROM ***************************.mf_time_spine subq_12 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + )) GROUP BY metric_time__day , metric_time__week diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql index 2dc779cc0a..4fcc298437 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0.sql @@ -105,9 +105,9 @@ FROM ( SELECT subq_4.ds AS metric_time__day FROM ***************************.mf_time_spine subq_4 - WHERE subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_4.ds BETWEEN '2020-01-01' AND '2020-01-01') ) subq_3 - INNER JOIN ( + CROSS JOIN ( -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] SELECT subq_1.ds__day @@ -216,16 +216,15 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2019-11-01' AND '2020-01-01' + WHERE (subq_1.metric_time__day BETWEEN '2019-11-01' AND '2020-01-01') ) subq_2 - ON - ( - subq_2.metric_time__day <= subq_3.metric_time__day - ) AND ( - subq_2.metric_time__day > DATEADD(month, -2, subq_3.metric_time__day) - ) + WHERE (( + subq_2.metric_time__day <= subq_3.metric_time__day + ) AND ( + subq_2.metric_time__day > DATEADD(month, -2, subq_3.metric_time__day) + )) ) subq_5 - WHERE subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_5.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql index 61a032c8f0..19db6e9e69 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_time_constraint__plan0_optimized.sql @@ -21,9 +21,9 @@ FROM ( SELECT ds AS metric_time__day FROM ***************************.mf_time_spine subq_13 - WHERE ds BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (ds BETWEEN '2020-01-01' AND '2020-01-01') ) subq_12 -INNER JOIN ( +CROSS JOIN ( -- Read Elements From Semantic Model 'revenue' -- Metric Time Dimension 'ds' -- Constrain Time Range to [2019-11-01T00:00:00, 2020-01-01T00:00:00] @@ -31,14 +31,12 @@ INNER JOIN ( date_trunc('day', created_at) AS metric_time__day , revenue AS txn_revenue FROM ***************************.fct_revenue revenue_src_28000 - WHERE date_trunc('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01' + WHERE (date_trunc('day', created_at) BETWEEN '2019-11-01' AND '2020-01-01') ) subq_11 -ON - ( - subq_11.metric_time__day <= subq_12.metric_time__day - ) AND ( - subq_11.metric_time__day > DATEADD(month, -2, subq_12.metric_time__day) - ) -WHERE subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' +WHERE (subq_12.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') AND (( + subq_11.metric_time__day <= subq_12.metric_time__day +) AND ( + subq_11.metric_time__day > DATEADD(month, -2, subq_12.metric_time__day) +)) GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql index 74fc72e7ce..5df74ee1d2 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0.sql @@ -82,7 +82,7 @@ FROM ( , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -152,12 +152,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql index d457e047c1..893285c048 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_derived_cumulative_metric_with_non_default_grains__plan0_optimized.sql @@ -28,14 +28,13 @@ FROM ( , date_trunc('week', subq_13.ds) AS metric_time__week , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_13 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) + )) GROUP BY metric_time__day , metric_time__week diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql index 4e37b7556a..323e834839 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0.sql @@ -81,7 +81,7 @@ FROM ( , date_trunc('month', subq_3.ds) AS metric_time__month FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -151,12 +151,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql index ae5b0cd351..cde92a4c04 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grain__plan0_optimized.sql @@ -27,14 +27,13 @@ FROM ( , date_trunc('month', subq_12.ds) AS metric_time__month , SUM(revenue_src_28000.revenue) AS revenue_mtd FROM ***************************.mf_time_spine subq_12 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) + )) GROUP BY metric_time__day , metric_time__month diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql index aee9b6c45f..e3de9575be 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0.sql @@ -91,7 +91,7 @@ FROM ( , subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -161,12 +161,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day >= date_trunc('month', subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql index 217bf116ec..5f4f20062f 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_grain_to_date_metric_with_non_default_grains__plan0_optimized.sql @@ -34,14 +34,13 @@ FROM ( , subq_12.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS revenue_mtd FROM ***************************.mf_time_spine subq_12 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) >= date_trunc('month', subq_12.ds) + )) GROUP BY revenue_instance__ds__quarter , revenue_instance__ds__year diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql index a93d49bada..96a23033a1 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0.sql @@ -77,7 +77,7 @@ FROM ( , date_trunc('year', subq_3.ds) AS metric_time__year FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -147,12 +147,11 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql index 05f97642f5..ae9d0c49ac 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grain__plan0_optimized.sql @@ -23,14 +23,13 @@ FROM ( , date_trunc('year', subq_12.ds) AS metric_time__year , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_12 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_12.ds) - ) + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_12.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_12.ds) + )) GROUP BY metric_time__day , metric_time__year diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql index 70fe666e69..640a4eeaa0 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0.sql @@ -200,7 +200,7 @@ FROM ( , date_trunc('week', subq_3.ds) AS metric_time__week FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -395,12 +395,11 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql index 70587a6e64..0c6d0b382c 100644 --- a/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlPlan/Clickhouse/test_window_metric_with_non_default_grains__plan0_optimized.sql @@ -42,14 +42,13 @@ FROM ( , date_trunc('week', subq_16.ds) AS metric_time__week , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers FROM ***************************.mf_time_spine subq_16 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) + )) GROUP BY booking__ds__month , metric_time__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql index 4ef5bca951..cfd18165f8 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0.sql @@ -5,7 +5,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_16.metric_time__martian_day - , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -261,7 +261,7 @@ FROM ( subq_5.ds__day = subq_6.ds ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -418,16 +418,15 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON + WHERE (( + subq_8.user = subq_11.user + ) AND ( ( - subq_8.user = subq_11.user + subq_8.metric_time__day <= subq_11.metric_time__day ) AND ( - ( - subq_8.metric_time__day <= subq_11.metric_time__day - ) AND ( - subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) - ) + subq_8.metric_time__day > DATEADD(day, -7, subq_11.metric_time__day) ) + )) ) subq_12 ) subq_13 ) subq_14 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql index 74bbfb05e6..172c8f4e4e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity__plan0_optimized.sql @@ -15,7 +15,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__martian_day AS metric_time__martian_day - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -97,7 +97,7 @@ FROM ( ON sma_28019_cte.metric_time__day = subq_22.ds ) subq_24 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -108,16 +108,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_27 - ON + WHERE (( + subq_24.user = subq_27.user + ) AND ( ( - subq_24.user = subq_27.user + subq_24.metric_time__day <= subq_27.metric_time__day ) AND ( - ( - subq_24.metric_time__day <= subq_27.metric_time__day - ) AND ( - subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) - ) + subq_24.metric_time__day > DATEADD(day, -7, subq_27.metric_time__day) ) + )) ) subq_28 GROUP BY metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql index c0cb1e62ff..6b002085c5 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0.sql @@ -5,7 +5,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_18.metric_time__martian_day - , CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_18.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_18.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -153,7 +153,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 GROUP BY @@ -352,10 +352,10 @@ FROM ( ON subq_6.ds__day = subq_7.ds ) subq_8 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_9 ) subq_10 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -512,16 +512,15 @@ FROM ( ) subq_11 ) subq_12 ) subq_13 - ON + WHERE (( + subq_10.user = subq_13.user + ) AND ( ( - subq_10.user = subq_13.user + subq_10.metric_time__day <= subq_13.metric_time__day ) AND ( - ( - subq_10.metric_time__day <= subq_13.metric_time__day - ) AND ( - subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) - ) + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) ) + )) ) subq_14 ) subq_15 ) subq_16 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql index 37b65a8181..5f25280064 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -15,7 +15,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__martian_day AS metric_time__martian_day - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -41,7 +41,7 @@ FROM ( ON sma_28019_cte.metric_time__day = subq_20.ds ) subq_21 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__martian_day ) subq_24 @@ -111,9 +111,9 @@ FROM ( ON sma_28019_cte.metric_time__day = subq_25.ds ) subq_26 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_28 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -124,16 +124,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_31 - ON + WHERE (( + subq_28.user = subq_31.user + ) AND ( ( - subq_28.user = subq_31.user + subq_28.metric_time__day <= subq_31.metric_time__day ) AND ( - ( - subq_28.metric_time__day <= subq_31.metric_time__day - ) AND ( - subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) - ) + subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) ) + )) ) subq_32 GROUP BY metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index 5ff7b26cd3..02949357a4 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -4,7 +4,7 @@ sql_engine: Clickhouse --- -- Compute Metrics via Expressions SELECT - CAST(subq_18.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + CAST(subq_18.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_18.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -149,7 +149,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 ) subq_5 @@ -344,10 +344,10 @@ FROM ( ON subq_6.ds__day = subq_7.ds ) subq_8 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_9 ) subq_10 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_12.ds__day @@ -504,16 +504,15 @@ FROM ( ) subq_11 ) subq_12 ) subq_13 - ON + WHERE (( + subq_10.user = subq_13.user + ) AND ( ( - subq_10.user = subq_13.user + subq_10.metric_time__day <= subq_13.metric_time__day ) AND ( - ( - subq_10.metric_time__day <= subq_13.metric_time__day - ) AND ( - subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) - ) + subq_10.metric_time__day > DATEADD(day, -7, subq_13.metric_time__day) ) + )) ) subq_14 ) subq_15 ) subq_16 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index 1f40ee482a..22e61b13f4 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_conversion_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -15,7 +15,7 @@ WITH sma_28019_cte AS ( ) SELECT - CAST(MAX(subq_35.buys) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_24.visits), 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + CAST(MAX(subq_35.buys) AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(MAX(subq_24.visits), 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Constrain Output with WHERE -- Pass Only Elements: ['visits',] @@ -34,7 +34,7 @@ FROM ( ON sma_28019_cte.metric_time__day = subq_20.ds ) subq_21 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_24 CROSS JOIN ( -- Find conversions for user within the range of 7 day @@ -101,9 +101,9 @@ CROSS JOIN ( ON sma_28019_cte.metric_time__day = subq_25.ds ) subq_26 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_28 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -114,15 +114,14 @@ CROSS JOIN ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_31 - ON + WHERE (( + subq_28.user = subq_31.user + ) AND ( ( - subq_28.user = subq_31.user + subq_28.metric_time__day <= subq_31.metric_time__day ) AND ( - ( - subq_28.metric_time__day <= subq_31.metric_time__day - ) AND ( - subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) - ) + subq_28.metric_time__day > DATEADD(day, -7, subq_31.metric_time__day) ) + )) ) subq_32 ) subq_35 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql index 2f156279a3..efdfa5280d 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0.sql @@ -76,7 +76,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -146,16 +146,15 @@ FROM ( FROM ***************************.fct_revenue revenue_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) - ) LEFT OUTER JOIN ***************************.mf_time_spine subq_4 ON subq_2.metric_time__day = subq_4.ds + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(month, -2, subq_2.metric_time__day) + )) ) subq_5 ) subq_6 GROUP BY diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql index 995ab55f67..5352b75f46 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_cumulative_metric_with_custom_granularity__plan0_optimized.sql @@ -22,18 +22,17 @@ FROM ( , subq_13.ds AS metric_time__day , SUM(revenue_src_28000.revenue) AS txn_revenue FROM ***************************.mf_time_spine subq_13 - INNER JOIN + CROSS JOIN ***************************.fct_revenue revenue_src_28000 - ON - ( - date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds - ) AND ( - date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) - ) LEFT OUTER JOIN ***************************.mf_time_spine subq_14 ON subq_13.ds = subq_14.ds + WHERE (( + date_trunc('day', revenue_src_28000.created_at) <= subq_13.ds + ) AND ( + date_trunc('day', revenue_src_28000.created_at) > DATEADD(month, -2, subq_13.ds) + )) GROUP BY metric_time__martian_day , metric_time__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql index 9093730d08..83520e7a1e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0.sql @@ -63,7 +63,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_6 ) subq_7 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_8 GROUP BY metric_time__martian_day @@ -381,7 +381,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 GROUP BY diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql index dd8bf6af2f..b969d2cd5f 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -19,7 +19,7 @@ FROM ( martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_18 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__martian_day ) subq_20 @@ -48,7 +48,7 @@ LEFT OUTER JOIN ( ON subq_11.ds__day = subq_12.ds ) subq_13 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__martian_day ) subq_16 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index 7aa8609d16..59b7c3c74a 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -63,7 +63,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_6 ) subq_7 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_8 ) subq_9 LEFT OUTER JOIN ( @@ -379,7 +379,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 GROUP BY diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index 1508583cbe..fecee0f3d1 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -20,7 +20,7 @@ FROM ( , martian_day AS metric_time__martian_day FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_18 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_20 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -48,7 +48,7 @@ LEFT OUTER JOIN ( ON subq_11.ds__day = subq_12.ds ) subq_13 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__day ) subq_16 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql index 7e5be0a6f2..28657c011a 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0.sql @@ -134,7 +134,7 @@ FROM ( ON date_trunc('day', listings_latest_src_28000.created_at) = subq_0.ds ) subq_1 - WHERE listing__ds__martian_day = '2020-01-01' + WHERE (listing__ds__martian_day = '2020-01-01') ) subq_2 GROUP BY listing__ds__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql index 869c28dc7b..e78e4d31de 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_filter__plan0_optimized.sql @@ -20,6 +20,6 @@ FROM ( ON date_trunc('day', listings_latest_src_28000.created_at) = subq_3.ds ) subq_4 -WHERE listing__ds__martian_day = '2020-01-01' +WHERE (listing__ds__martian_day = '2020-01-01') GROUP BY listing__ds__day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql index 0e98e1a33b..b930abb24f 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -134,7 +134,7 @@ FROM ( ON date_trunc('day', listings_latest_src_28000.created_at) = subq_0.ds ) subq_1 - WHERE listing__ds__martian_day = '2020-01-01' + WHERE (listing__ds__martian_day = '2020-01-01') ) subq_2 GROUP BY listing__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql index abf8aeeb40..53c2344051 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_no_metrics_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -19,6 +19,6 @@ FROM ( ON date_trunc('day', listings_latest_src_28000.created_at) = subq_3.ds ) subq_4 -WHERE listing__ds__martian_day = '2020-01-01' +WHERE (listing__ds__martian_day = '2020-01-01') GROUP BY listing__ds__martian_day diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql index 06df4927bc..f406314d9e 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0.sql @@ -466,7 +466,7 @@ FROM ( ON subq_4.metric_time__day = subq_5.ds ) subq_6 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_7 ) subq_8 GROUP BY diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql index f09d3d33c0..4535c52949 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_offset_metric_with_custom_granularity_filter_not_in_group_by__plan0_optimized.sql @@ -37,7 +37,7 @@ FROM ( ON time_spine_src_28006.ds = subq_16.ds ) subq_17 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__day ) subq_21 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql index 7b7931af2b..726d0686c6 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0.sql @@ -318,7 +318,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 ) subq_5 diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql index 2aec3e9e98..671ee715b7 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_filter__plan0_optimized.sql @@ -28,4 +28,4 @@ FROM ( ON subq_6.ds__day = subq_7.ds ) subq_8 -WHERE metric_time__martian_day = '2020-01-01' +WHERE (metric_time__martian_day = '2020-01-01') diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql index 8777a65b8e..3d356c4f02 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0.sql @@ -321,7 +321,7 @@ FROM ( ON subq_0.ds__day = subq_1.ds ) subq_2 - WHERE metric_time__martian_day = '2020-01-01' + WHERE (metric_time__martian_day = '2020-01-01') ) subq_3 ) subq_4 GROUP BY diff --git a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql index e50ea74a5a..0d68c64d10 100644 --- a/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_custom_granularity.py/SqlPlan/Clickhouse/test_simple_metric_with_custom_granularity_in_filter_and_group_by__plan0_optimized.sql @@ -29,6 +29,6 @@ FROM ( ON subq_6.ds__day = subq_7.ds ) subq_8 -WHERE metric_time__martian_day = '2020-01-01' +WHERE (metric_time__martian_day = '2020-01-01') GROUP BY metric_time__martian_day diff --git a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql index f6b2f5371f..525282e868 100644 --- a/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql +++ b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Clickhouse/test_build_saved_query_tasks__query0.sql @@ -26,7 +26,7 @@ FROM ( ON subq_1.listing = listings_latest_src_10000.listing_id ) subq_5 -WHERE listing__capacity_latest > 3 +WHERE (listing__capacity_latest > 3) GROUP BY metric_time__day , listing__capacity_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql index 10eaa6c309..64a4c07336 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_18.ds__day , subq_18.listing__country_latest - , CAST(subq_18.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_18.views, 0) AS DOUBLE PRECISION) AS bookings_per_view + , CAST(subq_18.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_18.views, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_view FROM ( -- Combine Aggregated Outputs SELECT diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql index 61ce32e18d..6357d9a13b 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql @@ -17,7 +17,7 @@ WITH sma_28014_cte AS ( SELECT ds__day AS ds__day , listing__country_latest AS listing__country_latest - , CAST(bookings AS DOUBLE PRECISION) / CAST(NULLIF(views, 0) AS DOUBLE PRECISION) AS bookings_per_view + , CAST(bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(views, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_view FROM ( -- Combine Aggregated Outputs SELECT diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql index 76c9b55845..ccbd46f16a 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_5.listing , subq_5.listing__country_latest - , CAST(subq_5.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_5.bookers, 0) AS DOUBLE PRECISION) AS bookings_per_booker + , CAST(subq_5.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_5.bookers, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_booker FROM ( -- Aggregate Measures SELECT diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql index 6b6a3b23a0..2477c6967e 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT listing , listing__country_latest - , CAST(bookings AS DOUBLE PRECISION) / CAST(NULLIF(bookers, 0) AS DOUBLE PRECISION) AS bookings_per_booker + , CAST(bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(bookers, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_booker FROM ( -- Join Standard Outputs -- Aggregate Measures diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql index 2bac166276..0b4e630ebd 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0.sql @@ -115,4 +115,4 @@ FROM ( ) subq_0 ) subq_1 ) subq_2 -WHERE subq_2.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02' +WHERE (subq_2.metric_time__day BETWEEN '2020-01-01' AND '2020-01-02') diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql index 5e6a875ffa..0e2cc8ad9d 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_constrain_time_range_node__plan0_optimized.sql @@ -13,4 +13,4 @@ SELECT , date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 -WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02' +WHERE (date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-02') diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql index 393bb1fa0d..065394ee2e 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0.sql @@ -227,7 +227,7 @@ FROM ( ON subq_0.user = subq_2.user ) subq_3 - WHERE listing__country_latest = 'us' + WHERE (listing__country_latest = 'us') ) subq_4 GROUP BY user__home_state_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql index d55f9084f9..176c0e2bfe 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_dimension_with_joined_where_constraint__plan0_optimized.sql @@ -19,6 +19,6 @@ FROM ( ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id ) subq_8 -WHERE listing__country_latest = 'us' +WHERE (listing__country_latest = 'us') GROUP BY user__home_state_latest diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql index cd8a7e8b65..e5b7a52501 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0.sql @@ -107,4 +107,4 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 -WHERE booking__ds__day = '2020-01-01' +WHERE (booking__ds__day = '2020-01-01') diff --git a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql index 160533491a..93e464d5b8 100644 --- a/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_node__plan0_optimized.sql @@ -16,4 +16,4 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_3 -WHERE booking__ds__day = '2020-01-01' +WHERE (booking__ds__day = '2020-01-01') diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql index b7ecf1d990..5478aa75bb 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql @@ -368,7 +368,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -563,17 +563,16 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 ON DATEADD(day, -2, subq_7.metric_time__day) = subq_4.metric_time__day ) subq_8 - WHERE subq_8.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' + WHERE (subq_8.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02') ) subq_9 ) subq_10 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql index bc01e8a0c2..65f17868c6 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -22,18 +22,17 @@ FROM ( subq_16.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_16 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_16.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_16.ds) + )) ) subq_17 ON DATEADD(day, -2, time_spine_src_28006.ds) = subq_17.metric_time__day - WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' + WHERE (time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02') GROUP BY metric_time__day ) subq_25 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql index fa7a7833a2..95cad87f52 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql @@ -579,7 +579,7 @@ FROM ( ) subq_6 ON date_trunc('month', subq_9.metric_time__day) = subq_6.metric_time__day - WHERE subq_9.metric_time__week = subq_9.metric_time__day + WHERE (subq_9.metric_time__week = subq_9.metric_time__day) ) subq_10 ) subq_11 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql index 20ab076933..599cbde926 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql @@ -47,7 +47,7 @@ FROM ( sma_28009_cte sma_28009_cte ON date_trunc('month', time_spine_src_28006.ds) = sma_28009_cte.metric_time__day - WHERE date_trunc('week', time_spine_src_28006.ds) = time_spine_src_28006.ds + WHERE (date_trunc('week', time_spine_src_28006.ds) = time_spine_src_28006.ds) GROUP BY metric_time__week ) subq_27 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql index 1d1a5a754c..26a983e37a 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql @@ -364,7 +364,7 @@ FROM ( ) subq_1 ON date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day - WHERE subq_4.metric_time__year = subq_4.metric_time__day + WHERE (subq_4.metric_time__year = subq_4.metric_time__day) ) subq_5 ) subq_6 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql index c277c47f4a..84ff1e52a7 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql @@ -42,7 +42,7 @@ FROM ( sma_28009_cte sma_28009_cte ON date_trunc('month', rss_28018_cte.ds__day) = sma_28009_cte.metric_time__day - WHERE rss_28018_cte.ds__year = rss_28018_cte.ds__day + WHERE (rss_28018_cte.ds__year = rss_28018_cte.ds__day) GROUP BY metric_time__year ) subq_27 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql index 7e4e869aef..19154b0f53 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0.sql @@ -323,7 +323,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + WHERE (metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14') ) subq_2 ) subq_3 GROUP BY @@ -783,7 +783,7 @@ FROM ( ON DATEADD(day, -14, subq_10.metric_time__day) = subq_7.metric_time__day ) subq_11 - WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + WHERE (metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14') ) subq_12 ) subq_13 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql index aaeaf80f27..f37a9afbb0 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql @@ -36,7 +36,7 @@ FROM ( , bookings FROM sma_28009_cte sma_28009_cte ) subq_18 - WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + WHERE (metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14') GROUP BY metric_time__day ) subq_22 @@ -59,7 +59,7 @@ FROM ( ON DATEADD(day, -14, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day ) subq_27 - WHERE metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14' + WHERE (metric_time__day = '2020-01-01' or metric_time__day = '2020-01-14') GROUP BY metric_time__day ) subq_31 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql index f4931cc9fa..b0b29907e2 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0.sql @@ -267,7 +267,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -462,12 +462,11 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 ON DATEADD(day, -2, subq_7.metric_time__day) = subq_4.metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql index ca8de8fc59..ac8b2f2403 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_derived_offset_cumulative_metric__plan0_optimized.sql @@ -21,14 +21,13 @@ FROM ( subq_15.ds AS metric_time__day , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_15 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) + )) ) subq_16 ON DATEADD(day, -2, time_spine_src_28006.ds) = subq_16.metric_time__day diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql index a4977d3987..0ce2768377 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql @@ -432,6 +432,6 @@ FROM ( ON DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_14 ) subq_15 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql index d8a340842b..1806e6b220 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql @@ -61,5 +61,5 @@ FROM ( ON DATEADD(day, -2, rss_28018_cte.ds__day) = subq_25.metric_time__day ) subq_29 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_31 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql index d669b93d28..8ea047f30e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0.sql @@ -569,7 +569,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE (listing__is_lux_latest) AND (booking__is_instant) + WHERE ((listing__is_lux_latest) AND (booking__is_instant)) ) subq_6 ) subq_7 ) subq_8 @@ -1126,7 +1126,7 @@ FROM ( ON subq_11.listing = subq_14.listing ) subq_15 - WHERE (listing__is_lux_latest) AND (booking__is_instant) + WHERE ((listing__is_lux_latest) AND (booking__is_instant)) ) subq_16 ) subq_17 ) subq_18 @@ -1439,7 +1439,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_20 ) subq_21 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_22 ) subq_23 ) subq_24 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql index 2344ff593d..aebdfc320e 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_filters__plan0_optimized.sql @@ -47,7 +47,7 @@ FROM ( ON subq_29.listing = listings_latest_src_28000.listing_id ) subq_33 - WHERE (listing__is_lux_latest) AND (booking__is_instant) + WHERE ((listing__is_lux_latest) AND (booking__is_instant)) ) subq_37 CROSS JOIN ( -- Constrain Output with WHERE @@ -64,7 +64,7 @@ FROM ( , booking_value FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_39 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_43 ) subq_44 ) subq_45 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql index 830b0b573e..7281a5b27c 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0.sql @@ -420,5 +420,5 @@ FROM ( ON DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 - WHERE subq_13.metric_time__day BETWEEN '2020-01-12' AND '2020-01-13' + WHERE (subq_13.metric_time__day BETWEEN '2020-01-12' AND '2020-01-13') ) subq_14 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql index 4f46d5d54e..a5800c9b51 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_time_constraint__plan0_optimized.sql @@ -50,5 +50,5 @@ FROM ( ) subq_24 ON DATEADD(day, -2, rss_28018_cte.ds__day) = subq_24.metric_time__day - WHERE rss_28018_cte.ds__day BETWEEN '2020-01-12' AND '2020-01-13' + WHERE (rss_28018_cte.ds__day BETWEEN '2020-01-12' AND '2020-01-13') ) subq_29 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql index b011e281f9..590c8eeb13 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0.sql @@ -420,5 +420,5 @@ FROM ( ON DATEADD(day, -2, subq_12.metric_time__day) = subq_9.metric_time__day ) subq_13 - WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' + WHERE (metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13') ) subq_14 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql index bcc78a003a..006eade5c9 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_nested_offsets_with_where_constraint__plan0_optimized.sql @@ -55,5 +55,5 @@ FROM ( ON DATEADD(day, -2, rss_28018_cte.ds__day) = subq_24.metric_time__day ) subq_28 - WHERE metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13' + WHERE (metric_time__day = '2020-01-12' or metric_time__day = '2020-01-13') ) subq_29 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql index 0f2b391360..66adb7bee4 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql @@ -461,9 +461,9 @@ FROM ( ) subq_1 ON date_trunc('month', subq_4.metric_time__day) = subq_1.metric_time__day - WHERE subq_4.metric_time__month = subq_4.metric_time__day + WHERE (subq_4.metric_time__month = subq_4.metric_time__day) ) subq_5 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql index 1d37fcfbdc..7aac68ddca 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -33,9 +33,9 @@ FROM ( ) subq_11 ON date_trunc('month', time_spine_src_28006.ds) = subq_11.metric_time__day - WHERE date_trunc('month', time_spine_src_28006.ds) = time_spine_src_28006.ds + WHERE (date_trunc('month', time_spine_src_28006.ds) = time_spine_src_28006.ds) ) subq_15 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') GROUP BY metric_time__month ) subq_19 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql index 2f478a0745..4b67af60df 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql @@ -468,7 +468,7 @@ FROM ( ON DATEADD(week, -1, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_6 ) subq_7 GROUP BY @@ -786,7 +786,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_10 ) subq_11 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') ) subq_12 ) subq_13 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql index c8e79dc055..e9f4f0236f 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql @@ -45,7 +45,7 @@ FROM ( ON DATEADD(week, -1, time_spine_src_28006.ds) = sma_28009_cte.metric_time__day ) subq_22 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') GROUP BY metric_time__month ) subq_26 @@ -66,7 +66,7 @@ FROM ( , bookers FROM sma_28009_cte sma_28009_cte ) subq_27 - WHERE metric_time__day = '2020-01-01' + WHERE (metric_time__day = '2020-01-01') GROUP BY metric_time__month ) subq_31 diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql index b5edd7273a..52c474cda1 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0.sql @@ -459,7 +459,7 @@ FROM ( ON DATEADD(day, -5, subq_4.metric_time__day) = subq_1.metric_time__day ) subq_5 - WHERE subq_5.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02' + WHERE (subq_5.metric_time__day BETWEEN '2019-12-19' AND '2020-01-02') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql index a697da42c6..07f7875390 100644 --- a/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlPlan/Clickhouse/test_time_offset_metric_with_time_constraint__plan0_optimized.sql @@ -26,7 +26,7 @@ FROM ( ) subq_11 ON DATEADD(day, -5, time_spine_src_28006.ds) = subq_11.metric_time__day - WHERE time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02' + WHERE (time_spine_src_28006.ds BETWEEN '2019-12-19' AND '2020-01-02') GROUP BY metric_time__day ) subq_19 diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql index b5de526d2e..3b39952542 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0.sql @@ -228,7 +228,7 @@ FROM ( ON subq_0.user = subq_2.user ) subq_3 - WHERE user__home_state_latest = 'us' + WHERE (user__home_state_latest = 'us') ) subq_4 GROUP BY listing__is_lux_latest diff --git a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql index a826c3ba3f..61c011140a 100644 --- a/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlPlan/Clickhouse/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql @@ -20,7 +20,7 @@ FROM ( ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id ) subq_8 -WHERE user__home_state_latest = 'us' +WHERE (user__home_state_latest = 'us') GROUP BY listing__is_lux_latest , user__home_state_latest diff --git a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql index 3574ac3719..c247289b29 100644 --- a/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql +++ b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlPlan/Clickhouse/test_cast_to_timestamp__plan0.sql @@ -6,5 +6,5 @@ sql_engine: Clickhouse --- -- Test Cast to Timestamp Expression SELECT - toDateTime('2020-01-01') AS col0 + toDateTime64('2020-01-01') AS col0 FROM foo.bar a diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt index 7fc52da634..34cc439e31 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query__query_output.txt @@ -1,11 +1,11 @@ test_name: test_fill_nulls_with_0_multi_metric_query test_filename: test_fill_nulls_with_0.py --- -metric_time__week bookings_fill_nulls_with_0 views +metric_time__week bookings_fill_nulls_with_0 views ------------------- ---------------------------- ------- -2019-11-25T00:00:00 1 0 -2019-12-02T00:00:00 0 0 -2019-12-09T00:00:00 0 0 -2019-12-16T00:00:00 30 0 -2019-12-23T00:00:00 0 0 -2019-12-30T00:00:00 15 9 +2019-11-25T00:00:00 1 None +2019-12-02T00:00:00 0 None +2019-12-09T00:00:00 0 None +2019-12-16T00:00:00 30 None +2019-12-23T00:00:00 0 None +2019-12-30T00:00:00 15 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt index c7d698f00e..fe9134cf79 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt @@ -1,17 +1,20 @@ test_name: test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension test_filename: test_fill_nulls_with_0.py --- -metric_time__day listing__is_lux_latest bookings_fill_nulls_with_0_without_time_spine views +metric_time__day listing__is_lux_latest bookings_fill_nulls_with_0_without_time_spine views ------------------- ------------------------ ----------------------------------------------- ------- -1970-01-01T00:00:00 False 0 1 -2019-12-01T00:00:00 True 1 0 -2019-12-18T00:00:00 False 4 0 -2019-12-18T00:00:00 True 6 0 -2019-12-19T00:00:00 False 12 0 -2019-12-19T00:00:00 True 6 0 -2019-12-20T00:00:00 True 2 0 -2020-01-01T00:00:00 False 2 0 -2020-01-01T00:00:00 True 3 2 -2020-01-02T00:00:00 False 6 4 -2020-01-02T00:00:00 True 3 1 -2020-01-03T00:00:00 True 1 0 +2019-12-01T00:00:00 True 1 None +2019-12-18T00:00:00 False 4 None +2019-12-18T00:00:00 True 6 None +2019-12-19T00:00:00 False 10 None +2019-12-19T00:00:00 True 6 None +2019-12-19T00:00:00 None 2 None +2019-12-20T00:00:00 True 2 None +2020-01-01T00:00:00 False 2 None +2020-01-01T00:00:00 True 3 2 +2020-01-02T00:00:00 False 5 3 +2020-01-02T00:00:00 True 3 1 +2020-01-02T00:00:00 None 1 1 +2020-01-03T00:00:00 True 1 None +2020-01-04T00:00:00 False 0 1 +2020-01-05T00:00:00 None 0 1 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt index 1cea5bb1c6..6f1e747281 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_custom_grain_in_group_by__query_output.txt @@ -1,20 +1,20 @@ test_name: test_join_to_time_spine_with_custom_grain_in_group_by test_filename: test_fill_nulls_with_0.py --- -booking__ds__martian_day bookings_join_to_time_spine +booking__ds__martian_day bookings_join_to_time_spine -------------------------- ----------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 0 -2020-01-03T00:00:00 0 -2020-01-04T00:00:00 0 -2020-01-05T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 0 -2020-01-08T00:00:00 46 -2020-01-09T00:00:00 0 -2020-01-10T00:00:00 0 -2020-01-11T00:00:00 0 -2020-01-12T00:00:00 0 -2020-01-13T00:00:00 0 -2020-01-14T00:00:00 0 -2020-01-15T00:00:00 0 +2020-01-01T00:00:00 None +2020-01-02T00:00:00 None +2020-01-03T00:00:00 None +2020-01-04T00:00:00 None +2020-01-05T00:00:00 None +2020-01-06T00:00:00 None +2020-01-07T00:00:00 None +2020-01-08T00:00:00 46 +2020-01-09T00:00:00 None +2020-01-10T00:00:00 None +2020-01-11T00:00:00 None +2020-01-12T00:00:00 None +2020-01-13T00:00:00 None +2020-01-14T00:00:00 None +2020-01-15T00:00:00 None diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt index 9a7fd2973f..41f7225a3e 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__query_output.txt @@ -1,7 +1,7 @@ test_name: test_join_to_time_spine_with_filter_not_in_group_by test_filename: test_fill_nulls_with_0.py --- -metric_time__day bookings_join_to_time_spine_with_tiered_filters +metric_time__day bookings_join_to_time_spine_with_tiered_filters ------------------- ------------------------------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 9 +2020-01-01T00:00:00 None +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt index 4a8092fde1..d9496fabd6 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__query_output.txt @@ -1,7 +1,7 @@ test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time test_filename: test_fill_nulls_with_0.py --- -booking__ds__day bookings_join_to_time_spine_with_tiered_filters +booking__ds__day bookings_join_to_time_spine_with_tiered_filters ------------------- ------------------------------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 9 +2020-01-01T00:00:00 None +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt index 63afdee818..c7c2e46f6a 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__query_output.txt @@ -1,7 +1,7 @@ test_name: test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time test_filename: test_fill_nulls_with_0.py --- -metric_time__day bookings_join_to_time_spine_with_tiered_filters +metric_time__day bookings_join_to_time_spine_with_tiered_filters ------------------- ------------------------------------------------- -2020-01-01T00:00:00 0 -2020-01-02T00:00:00 9 +2020-01-01T00:00:00 None +2020-01-02T00:00:00 9 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt index 078f66e0c5..c980e19fb0 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by__query_output.txt @@ -1,1005 +1,1005 @@ test_name: test_join_to_timespine_metric_with_custom_granularity_filter_not_in_group_by test_filename: test_fill_nulls_with_0.py --- -metric_time__day bookings_join_to_time_spine +metric_time__day bookings_join_to_time_spine ------------------- ----------------------------- -2019-03-02T00:00:00 0 -2019-03-03T00:00:00 0 -2019-03-04T00:00:00 0 -2019-03-05T00:00:00 0 -2019-03-06T00:00:00 0 -2019-03-07T00:00:00 0 -2019-03-08T00:00:00 0 -2019-03-09T00:00:00 0 -2019-03-10T00:00:00 0 -2019-03-11T00:00:00 0 -2019-03-12T00:00:00 0 -2019-03-13T00:00:00 0 -2019-03-14T00:00:00 0 -2019-03-15T00:00:00 0 -2019-03-16T00:00:00 0 -2019-03-17T00:00:00 0 -2019-03-18T00:00:00 0 -2019-03-19T00:00:00 0 -2019-03-20T00:00:00 0 -2019-03-21T00:00:00 0 -2019-03-22T00:00:00 0 -2019-03-23T00:00:00 0 -2019-03-24T00:00:00 0 -2019-03-25T00:00:00 0 -2019-03-26T00:00:00 0 -2019-03-27T00:00:00 0 -2019-03-28T00:00:00 0 -2019-03-29T00:00:00 0 -2019-03-30T00:00:00 0 -2019-03-31T00:00:00 0 -2019-04-01T00:00:00 0 -2019-04-02T00:00:00 0 -2019-04-03T00:00:00 0 -2019-04-04T00:00:00 0 -2019-04-05T00:00:00 0 -2019-04-06T00:00:00 0 -2019-04-07T00:00:00 0 -2019-04-08T00:00:00 0 -2019-04-09T00:00:00 0 -2019-04-10T00:00:00 0 -2019-04-11T00:00:00 0 -2019-04-12T00:00:00 0 -2019-04-13T00:00:00 0 -2019-04-14T00:00:00 0 -2019-04-15T00:00:00 0 -2019-04-16T00:00:00 0 -2019-04-17T00:00:00 0 -2019-04-18T00:00:00 0 -2019-04-19T00:00:00 0 -2019-04-20T00:00:00 0 -2019-04-21T00:00:00 0 -2019-04-22T00:00:00 0 -2019-04-23T00:00:00 0 -2019-04-24T00:00:00 0 -2019-04-25T00:00:00 0 -2019-04-26T00:00:00 0 -2019-04-27T00:00:00 0 -2019-04-28T00:00:00 0 -2019-04-29T00:00:00 0 -2019-04-30T00:00:00 0 -2019-05-01T00:00:00 0 -2019-05-02T00:00:00 0 -2019-05-03T00:00:00 0 -2019-05-04T00:00:00 0 -2019-05-05T00:00:00 0 -2019-05-06T00:00:00 0 -2019-05-07T00:00:00 0 -2019-05-08T00:00:00 0 -2019-05-09T00:00:00 0 -2019-05-10T00:00:00 0 -2019-05-11T00:00:00 0 -2019-05-12T00:00:00 0 -2019-05-13T00:00:00 0 -2019-05-14T00:00:00 0 -2019-05-15T00:00:00 0 -2019-05-16T00:00:00 0 -2019-05-17T00:00:00 0 -2019-05-18T00:00:00 0 -2019-05-19T00:00:00 0 -2019-05-20T00:00:00 0 -2019-05-21T00:00:00 0 -2019-05-22T00:00:00 0 -2019-05-23T00:00:00 0 -2019-05-24T00:00:00 0 -2019-05-25T00:00:00 0 -2019-05-26T00:00:00 0 -2019-05-27T00:00:00 0 -2019-05-28T00:00:00 0 -2019-05-29T00:00:00 0 -2019-05-30T00:00:00 0 -2019-05-31T00:00:00 0 -2019-06-01T00:00:00 0 -2019-06-02T00:00:00 0 -2019-06-03T00:00:00 0 -2019-06-04T00:00:00 0 -2019-06-05T00:00:00 0 -2019-06-06T00:00:00 0 -2019-06-07T00:00:00 0 -2019-06-08T00:00:00 0 -2019-06-09T00:00:00 0 -2019-06-10T00:00:00 0 -2019-06-11T00:00:00 0 -2019-06-12T00:00:00 0 -2019-06-13T00:00:00 0 -2019-06-14T00:00:00 0 -2019-06-15T00:00:00 0 -2019-06-16T00:00:00 0 -2019-06-17T00:00:00 0 -2019-06-18T00:00:00 0 -2019-06-19T00:00:00 0 -2019-06-20T00:00:00 0 -2019-06-21T00:00:00 0 -2019-06-22T00:00:00 0 -2019-06-23T00:00:00 0 -2019-06-24T00:00:00 0 -2019-06-25T00:00:00 0 -2019-06-26T00:00:00 0 -2019-06-27T00:00:00 0 -2019-06-28T00:00:00 0 -2019-06-29T00:00:00 0 -2019-06-30T00:00:00 0 -2019-07-01T00:00:00 0 -2019-07-02T00:00:00 0 -2019-07-03T00:00:00 0 -2019-07-04T00:00:00 0 -2019-07-05T00:00:00 0 -2019-07-06T00:00:00 0 -2019-07-07T00:00:00 0 -2019-07-08T00:00:00 0 -2019-07-09T00:00:00 0 -2019-07-10T00:00:00 0 -2019-07-11T00:00:00 0 -2019-07-12T00:00:00 0 -2019-07-13T00:00:00 0 -2019-07-14T00:00:00 0 -2019-07-15T00:00:00 0 -2019-07-16T00:00:00 0 -2019-07-17T00:00:00 0 -2019-07-18T00:00:00 0 -2019-07-19T00:00:00 0 -2019-07-20T00:00:00 0 -2019-07-21T00:00:00 0 -2019-07-22T00:00:00 0 -2019-07-23T00:00:00 0 -2019-07-24T00:00:00 0 -2019-07-25T00:00:00 0 -2019-07-26T00:00:00 0 -2019-07-27T00:00:00 0 -2019-07-28T00:00:00 0 -2019-07-29T00:00:00 0 -2019-07-30T00:00:00 0 -2019-07-31T00:00:00 0 -2019-08-01T00:00:00 0 -2019-08-02T00:00:00 0 -2019-08-03T00:00:00 0 -2019-08-04T00:00:00 0 -2019-08-05T00:00:00 0 -2019-08-06T00:00:00 0 -2019-08-07T00:00:00 0 -2019-08-08T00:00:00 0 -2019-08-09T00:00:00 0 -2019-08-10T00:00:00 0 -2019-08-11T00:00:00 0 -2019-08-12T00:00:00 0 -2019-08-13T00:00:00 0 -2019-08-14T00:00:00 0 -2019-08-15T00:00:00 0 -2019-08-16T00:00:00 0 -2019-08-17T00:00:00 0 -2019-08-18T00:00:00 0 -2019-08-19T00:00:00 0 -2019-08-20T00:00:00 0 -2019-08-21T00:00:00 0 -2019-08-22T00:00:00 0 -2019-08-23T00:00:00 0 -2019-08-24T00:00:00 0 -2019-08-25T00:00:00 0 -2019-08-26T00:00:00 0 -2019-08-27T00:00:00 0 -2019-08-28T00:00:00 0 -2019-08-29T00:00:00 0 -2019-08-30T00:00:00 0 -2019-08-31T00:00:00 0 -2019-09-01T00:00:00 0 -2019-09-02T00:00:00 0 -2019-09-03T00:00:00 0 -2019-09-04T00:00:00 0 -2019-09-05T00:00:00 0 -2019-09-06T00:00:00 0 -2019-09-07T00:00:00 0 -2019-09-08T00:00:00 0 -2019-09-09T00:00:00 0 -2019-09-10T00:00:00 0 -2019-09-11T00:00:00 0 -2019-09-12T00:00:00 0 -2019-09-13T00:00:00 0 -2019-09-14T00:00:00 0 -2019-09-15T00:00:00 0 -2019-09-16T00:00:00 0 -2019-09-17T00:00:00 0 -2019-09-18T00:00:00 0 -2019-09-19T00:00:00 0 -2019-09-20T00:00:00 0 -2019-09-21T00:00:00 0 -2019-09-22T00:00:00 0 -2019-09-23T00:00:00 0 -2019-09-24T00:00:00 0 -2019-09-25T00:00:00 0 -2019-09-26T00:00:00 0 -2019-09-27T00:00:00 0 -2019-09-28T00:00:00 0 -2019-09-29T00:00:00 0 -2019-09-30T00:00:00 0 -2019-10-01T00:00:00 0 -2019-10-02T00:00:00 0 -2019-10-03T00:00:00 0 -2019-10-04T00:00:00 0 -2019-10-05T00:00:00 0 -2019-10-06T00:00:00 0 -2019-10-07T00:00:00 0 -2019-10-08T00:00:00 0 -2019-10-09T00:00:00 0 -2019-10-10T00:00:00 0 -2019-10-11T00:00:00 0 -2019-10-12T00:00:00 0 -2019-10-13T00:00:00 0 -2019-10-14T00:00:00 0 -2019-10-15T00:00:00 0 -2019-10-16T00:00:00 0 -2019-10-17T00:00:00 0 -2019-10-18T00:00:00 0 -2019-10-19T00:00:00 0 -2019-10-20T00:00:00 0 -2019-10-21T00:00:00 0 -2019-10-22T00:00:00 0 -2019-10-23T00:00:00 0 -2019-10-24T00:00:00 0 -2019-10-25T00:00:00 0 -2019-10-26T00:00:00 0 -2019-10-27T00:00:00 0 -2019-10-28T00:00:00 0 -2019-10-29T00:00:00 0 -2019-10-30T00:00:00 0 -2019-10-31T00:00:00 0 -2019-11-01T00:00:00 0 -2019-11-02T00:00:00 0 -2019-11-03T00:00:00 0 -2019-11-04T00:00:00 0 -2019-11-05T00:00:00 0 -2019-11-06T00:00:00 0 -2019-11-07T00:00:00 0 -2019-11-08T00:00:00 0 -2019-11-09T00:00:00 0 -2019-11-10T00:00:00 0 -2019-11-11T00:00:00 0 -2019-11-12T00:00:00 0 -2019-11-13T00:00:00 0 -2019-11-14T00:00:00 0 -2019-11-15T00:00:00 0 -2019-11-16T00:00:00 0 -2019-11-17T00:00:00 0 -2019-11-18T00:00:00 0 -2019-11-19T00:00:00 0 -2019-11-20T00:00:00 0 -2019-11-21T00:00:00 0 -2019-11-22T00:00:00 0 -2019-11-23T00:00:00 0 -2019-11-24T00:00:00 0 -2019-11-25T00:00:00 0 -2019-11-26T00:00:00 0 -2019-11-27T00:00:00 0 -2019-11-28T00:00:00 0 -2019-11-29T00:00:00 0 -2019-11-30T00:00:00 0 -2019-12-01T00:00:00 1 -2019-12-02T00:00:00 0 -2019-12-03T00:00:00 0 -2019-12-04T00:00:00 0 -2019-12-05T00:00:00 0 -2019-12-06T00:00:00 0 -2019-12-07T00:00:00 0 -2019-12-08T00:00:00 0 -2019-12-09T00:00:00 0 -2019-12-10T00:00:00 0 -2019-12-11T00:00:00 0 -2019-12-12T00:00:00 0 -2019-12-13T00:00:00 0 -2019-12-14T00:00:00 0 -2019-12-15T00:00:00 0 -2019-12-16T00:00:00 0 -2019-12-17T00:00:00 0 -2019-12-18T00:00:00 10 -2019-12-19T00:00:00 18 -2019-12-20T00:00:00 2 -2019-12-21T00:00:00 0 -2019-12-22T00:00:00 0 -2019-12-23T00:00:00 0 -2019-12-24T00:00:00 0 -2019-12-25T00:00:00 0 -2019-12-26T00:00:00 0 -2019-12-27T00:00:00 0 -2019-12-28T00:00:00 0 -2019-12-29T00:00:00 0 -2019-12-30T00:00:00 0 -2019-12-31T00:00:00 0 -2020-01-01T00:00:00 5 -2020-01-02T00:00:00 9 -2020-01-03T00:00:00 1 -2020-01-04T00:00:00 0 -2020-01-05T00:00:00 0 -2020-01-06T00:00:00 0 -2020-01-07T00:00:00 0 -2020-01-08T00:00:00 0 -2020-01-09T00:00:00 0 -2020-01-10T00:00:00 0 -2020-01-11T00:00:00 0 -2020-01-12T00:00:00 0 -2020-01-13T00:00:00 0 -2020-01-14T00:00:00 0 -2020-01-15T00:00:00 0 -2020-01-16T00:00:00 0 -2020-01-17T00:00:00 0 -2020-01-18T00:00:00 0 -2020-01-19T00:00:00 0 -2020-01-20T00:00:00 0 -2020-01-21T00:00:00 0 -2020-01-22T00:00:00 0 -2020-01-23T00:00:00 0 -2020-01-24T00:00:00 0 -2020-01-25T00:00:00 0 -2020-01-26T00:00:00 0 -2020-01-27T00:00:00 0 -2020-01-28T00:00:00 0 -2020-01-29T00:00:00 0 -2020-01-30T00:00:00 0 -2020-01-31T00:00:00 0 -2020-02-01T00:00:00 0 -2020-02-02T00:00:00 0 -2020-02-03T00:00:00 0 -2020-02-04T00:00:00 0 -2020-02-05T00:00:00 0 -2020-02-06T00:00:00 0 -2020-02-07T00:00:00 0 -2020-02-08T00:00:00 0 -2020-02-09T00:00:00 0 -2020-02-10T00:00:00 0 -2020-02-11T00:00:00 0 -2020-02-12T00:00:00 0 -2020-02-13T00:00:00 0 -2020-02-14T00:00:00 0 -2020-02-15T00:00:00 0 -2020-02-16T00:00:00 0 -2020-02-17T00:00:00 0 -2020-02-18T00:00:00 0 -2020-02-19T00:00:00 0 -2020-02-20T00:00:00 0 -2020-02-21T00:00:00 0 -2020-02-22T00:00:00 0 -2020-02-23T00:00:00 0 -2020-02-24T00:00:00 0 -2020-02-25T00:00:00 0 -2020-02-26T00:00:00 0 -2020-02-27T00:00:00 0 -2020-02-28T00:00:00 0 -2020-02-29T00:00:00 0 -2020-03-01T00:00:00 0 -2020-03-02T00:00:00 0 -2020-03-03T00:00:00 0 -2020-03-04T00:00:00 0 -2020-03-05T00:00:00 0 -2020-03-06T00:00:00 0 -2020-03-07T00:00:00 0 -2020-03-08T00:00:00 0 -2020-03-09T00:00:00 0 -2020-03-10T00:00:00 0 -2020-03-11T00:00:00 0 -2020-03-12T00:00:00 0 -2020-03-13T00:00:00 0 -2020-03-14T00:00:00 0 -2020-03-15T00:00:00 0 -2020-03-16T00:00:00 0 -2020-03-17T00:00:00 0 -2020-03-18T00:00:00 0 -2020-03-19T00:00:00 0 -2020-03-20T00:00:00 0 -2020-03-21T00:00:00 0 -2020-03-22T00:00:00 0 -2020-03-23T00:00:00 0 -2020-03-24T00:00:00 0 -2020-03-25T00:00:00 0 -2020-03-26T00:00:00 0 -2020-03-27T00:00:00 0 -2020-03-28T00:00:00 0 -2020-03-29T00:00:00 0 -2020-03-30T00:00:00 0 -2020-03-31T00:00:00 0 -2020-04-01T00:00:00 0 -2020-04-02T00:00:00 0 -2020-04-03T00:00:00 0 -2020-04-04T00:00:00 0 -2020-04-05T00:00:00 0 -2020-04-06T00:00:00 0 -2020-04-07T00:00:00 0 -2020-04-08T00:00:00 0 -2020-04-09T00:00:00 0 -2020-04-10T00:00:00 0 -2020-04-11T00:00:00 0 -2020-04-12T00:00:00 0 -2020-04-13T00:00:00 0 -2020-04-14T00:00:00 0 -2020-04-15T00:00:00 0 -2020-04-16T00:00:00 0 -2020-04-17T00:00:00 0 -2020-04-18T00:00:00 0 -2020-04-19T00:00:00 0 -2020-04-20T00:00:00 0 -2020-04-21T00:00:00 0 -2020-04-22T00:00:00 0 -2020-04-23T00:00:00 0 -2020-04-24T00:00:00 0 -2020-04-25T00:00:00 0 -2020-04-26T00:00:00 0 -2020-04-27T00:00:00 0 -2020-04-28T00:00:00 0 -2020-04-29T00:00:00 0 -2020-04-30T00:00:00 0 -2020-05-01T00:00:00 0 -2020-05-02T00:00:00 0 -2020-05-03T00:00:00 0 -2020-05-04T00:00:00 0 -2020-05-05T00:00:00 0 -2020-05-06T00:00:00 0 -2020-05-07T00:00:00 0 -2020-05-08T00:00:00 0 -2020-05-09T00:00:00 0 -2020-05-10T00:00:00 0 -2020-05-11T00:00:00 0 -2020-05-12T00:00:00 0 -2020-05-13T00:00:00 0 -2020-05-14T00:00:00 0 -2020-05-15T00:00:00 0 -2020-05-16T00:00:00 0 -2020-05-17T00:00:00 0 -2020-05-18T00:00:00 0 -2020-05-19T00:00:00 0 -2020-05-20T00:00:00 0 -2020-05-21T00:00:00 0 -2020-05-22T00:00:00 0 -2020-05-23T00:00:00 0 -2020-05-24T00:00:00 0 -2020-05-25T00:00:00 0 -2020-05-26T00:00:00 0 -2020-05-27T00:00:00 0 -2020-05-28T00:00:00 0 -2020-05-29T00:00:00 0 -2020-05-30T00:00:00 0 -2020-05-31T00:00:00 0 -2020-06-01T00:00:00 0 -2020-06-02T00:00:00 0 -2020-06-03T00:00:00 0 -2020-06-04T00:00:00 0 -2020-06-05T00:00:00 0 -2020-06-06T00:00:00 0 -2020-06-07T00:00:00 0 -2020-06-08T00:00:00 0 -2020-06-09T00:00:00 0 -2020-06-10T00:00:00 0 -2020-06-11T00:00:00 0 -2020-06-12T00:00:00 0 -2020-06-13T00:00:00 0 -2020-06-14T00:00:00 0 -2020-06-15T00:00:00 0 -2020-06-16T00:00:00 0 -2020-06-17T00:00:00 0 -2020-06-18T00:00:00 0 -2020-06-19T00:00:00 0 -2020-06-20T00:00:00 0 -2020-06-21T00:00:00 0 -2020-06-22T00:00:00 0 -2020-06-23T00:00:00 0 -2020-06-24T00:00:00 0 -2020-06-25T00:00:00 0 -2020-06-26T00:00:00 0 -2020-06-27T00:00:00 0 -2020-06-28T00:00:00 0 -2020-06-29T00:00:00 0 -2020-06-30T00:00:00 0 -2020-07-01T00:00:00 0 -2020-07-02T00:00:00 0 -2020-07-03T00:00:00 0 -2020-07-04T00:00:00 0 -2020-07-05T00:00:00 0 -2020-07-06T00:00:00 0 -2020-07-07T00:00:00 0 -2020-07-08T00:00:00 0 -2020-07-09T00:00:00 0 -2020-07-10T00:00:00 0 -2020-07-11T00:00:00 0 -2020-07-12T00:00:00 0 -2020-07-13T00:00:00 0 -2020-07-14T00:00:00 0 -2020-07-15T00:00:00 0 -2020-07-16T00:00:00 0 -2020-07-17T00:00:00 0 -2020-07-18T00:00:00 0 -2020-07-19T00:00:00 0 -2020-07-20T00:00:00 0 -2020-07-21T00:00:00 0 -2020-07-22T00:00:00 0 -2020-07-23T00:00:00 0 -2020-07-24T00:00:00 0 -2020-07-25T00:00:00 0 -2020-07-26T00:00:00 0 -2020-07-27T00:00:00 0 -2020-07-28T00:00:00 0 -2020-07-29T00:00:00 0 -2020-07-30T00:00:00 0 -2020-07-31T00:00:00 0 -2020-08-01T00:00:00 0 -2020-08-02T00:00:00 0 -2020-08-03T00:00:00 0 -2020-08-04T00:00:00 0 -2020-08-05T00:00:00 0 -2020-08-06T00:00:00 0 -2020-08-07T00:00:00 0 -2020-08-08T00:00:00 0 -2020-08-09T00:00:00 0 -2020-08-10T00:00:00 0 -2020-08-11T00:00:00 0 -2020-08-12T00:00:00 0 -2020-08-13T00:00:00 0 -2020-08-14T00:00:00 0 -2020-08-15T00:00:00 0 -2020-08-16T00:00:00 0 -2020-08-17T00:00:00 0 -2020-08-18T00:00:00 0 -2020-08-19T00:00:00 0 -2020-08-20T00:00:00 0 -2020-08-21T00:00:00 0 -2020-08-22T00:00:00 0 -2020-08-23T00:00:00 0 -2020-08-24T00:00:00 0 -2020-08-25T00:00:00 0 -2020-08-26T00:00:00 0 -2020-08-27T00:00:00 0 -2020-08-28T00:00:00 0 -2020-08-29T00:00:00 0 -2020-08-30T00:00:00 0 -2020-08-31T00:00:00 0 -2020-09-01T00:00:00 0 -2020-09-02T00:00:00 0 -2020-09-03T00:00:00 0 -2020-09-04T00:00:00 0 -2020-09-05T00:00:00 0 -2020-09-06T00:00:00 0 -2020-09-07T00:00:00 0 -2020-09-08T00:00:00 0 -2020-09-09T00:00:00 0 -2020-09-10T00:00:00 0 -2020-09-11T00:00:00 0 -2020-09-12T00:00:00 0 -2020-09-13T00:00:00 0 -2020-09-14T00:00:00 0 -2020-09-15T00:00:00 0 -2020-09-16T00:00:00 0 -2020-09-17T00:00:00 0 -2020-09-18T00:00:00 0 -2020-09-19T00:00:00 0 -2020-09-20T00:00:00 0 -2020-09-21T00:00:00 0 -2020-09-22T00:00:00 0 -2020-09-23T00:00:00 0 -2020-09-24T00:00:00 0 -2020-09-25T00:00:00 0 -2020-09-26T00:00:00 0 -2020-09-27T00:00:00 0 -2020-09-28T00:00:00 0 -2020-09-29T00:00:00 0 -2020-09-30T00:00:00 0 -2020-10-01T00:00:00 0 -2020-10-02T00:00:00 0 -2020-10-03T00:00:00 0 -2020-10-04T00:00:00 0 -2020-10-05T00:00:00 0 -2020-10-06T00:00:00 0 -2020-10-07T00:00:00 0 -2020-10-08T00:00:00 0 -2020-10-09T00:00:00 0 -2020-10-10T00:00:00 0 -2020-10-11T00:00:00 0 -2020-10-12T00:00:00 0 -2020-10-13T00:00:00 0 -2020-10-14T00:00:00 0 -2020-10-15T00:00:00 0 -2020-10-16T00:00:00 0 -2020-10-17T00:00:00 0 -2020-10-18T00:00:00 0 -2020-10-19T00:00:00 0 -2020-10-20T00:00:00 0 -2020-10-21T00:00:00 0 -2020-10-22T00:00:00 0 -2020-10-23T00:00:00 0 -2020-10-24T00:00:00 0 -2020-10-25T00:00:00 0 -2020-10-26T00:00:00 0 -2020-10-27T00:00:00 0 -2020-10-28T00:00:00 0 -2020-10-29T00:00:00 0 -2020-10-30T00:00:00 0 -2020-10-31T00:00:00 0 -2020-11-01T00:00:00 0 -2020-11-02T00:00:00 0 -2020-11-03T00:00:00 0 -2020-11-04T00:00:00 0 -2020-11-05T00:00:00 0 -2020-11-06T00:00:00 0 -2020-11-07T00:00:00 0 -2020-11-08T00:00:00 0 -2020-11-09T00:00:00 0 -2020-11-10T00:00:00 0 -2020-11-11T00:00:00 0 -2020-11-12T00:00:00 0 -2020-11-13T00:00:00 0 -2020-11-14T00:00:00 0 -2020-11-15T00:00:00 0 -2020-11-16T00:00:00 0 -2020-11-17T00:00:00 0 -2020-11-18T00:00:00 0 -2020-11-19T00:00:00 0 -2020-11-20T00:00:00 0 -2020-11-21T00:00:00 0 -2020-11-22T00:00:00 0 -2020-11-23T00:00:00 0 -2020-11-24T00:00:00 0 -2020-11-25T00:00:00 0 -2020-11-26T00:00:00 0 -2020-11-27T00:00:00 0 -2020-11-28T00:00:00 0 -2020-11-29T00:00:00 0 -2020-11-30T00:00:00 0 -2020-12-01T00:00:00 0 -2020-12-02T00:00:00 0 -2020-12-03T00:00:00 0 -2020-12-04T00:00:00 0 -2020-12-05T00:00:00 0 -2020-12-06T00:00:00 0 -2020-12-07T00:00:00 0 -2020-12-08T00:00:00 0 -2020-12-09T00:00:00 0 -2020-12-10T00:00:00 0 -2020-12-11T00:00:00 0 -2020-12-12T00:00:00 0 -2020-12-13T00:00:00 0 -2020-12-14T00:00:00 0 -2020-12-15T00:00:00 0 -2020-12-16T00:00:00 0 -2020-12-17T00:00:00 0 -2020-12-18T00:00:00 0 -2020-12-19T00:00:00 0 -2020-12-20T00:00:00 0 -2020-12-21T00:00:00 0 -2020-12-22T00:00:00 0 -2020-12-23T00:00:00 0 -2020-12-24T00:00:00 0 -2020-12-25T00:00:00 0 -2020-12-26T00:00:00 0 -2020-12-27T00:00:00 0 -2020-12-28T00:00:00 0 -2020-12-29T00:00:00 0 -2020-12-30T00:00:00 0 -2020-12-31T00:00:00 0 -2021-01-01T00:00:00 0 -2021-01-02T00:00:00 0 -2021-01-03T00:00:00 0 -2021-01-04T00:00:00 0 -2021-01-05T00:00:00 0 -2021-01-06T00:00:00 0 -2021-01-07T00:00:00 0 -2021-01-08T00:00:00 0 -2021-01-09T00:00:00 0 -2021-01-10T00:00:00 0 -2021-01-11T00:00:00 0 -2021-01-12T00:00:00 0 -2021-01-13T00:00:00 0 -2021-01-14T00:00:00 0 -2021-01-15T00:00:00 0 -2021-01-16T00:00:00 0 -2021-01-17T00:00:00 0 -2021-01-18T00:00:00 0 -2021-01-19T00:00:00 0 -2021-01-20T00:00:00 0 -2021-01-21T00:00:00 0 -2021-01-22T00:00:00 0 -2021-01-23T00:00:00 0 -2021-01-24T00:00:00 0 -2021-01-25T00:00:00 0 -2021-01-26T00:00:00 0 -2021-01-27T00:00:00 0 -2021-01-28T00:00:00 0 -2021-01-29T00:00:00 0 -2021-01-30T00:00:00 0 -2021-01-31T00:00:00 0 -2021-02-01T00:00:00 0 -2021-02-02T00:00:00 0 -2021-02-03T00:00:00 0 -2021-02-04T00:00:00 0 -2021-02-05T00:00:00 0 -2021-02-06T00:00:00 0 -2021-02-07T00:00:00 0 -2021-02-08T00:00:00 0 -2021-02-09T00:00:00 0 -2021-02-10T00:00:00 0 -2021-02-11T00:00:00 0 -2021-02-12T00:00:00 0 -2021-02-13T00:00:00 0 -2021-02-14T00:00:00 0 -2021-02-15T00:00:00 0 -2021-02-16T00:00:00 0 -2021-02-17T00:00:00 0 -2021-02-18T00:00:00 0 -2021-02-19T00:00:00 0 -2021-02-20T00:00:00 0 -2021-02-21T00:00:00 0 -2021-02-22T00:00:00 0 -2021-02-23T00:00:00 0 -2021-02-24T00:00:00 0 -2021-02-25T00:00:00 0 -2021-02-26T00:00:00 0 -2021-02-27T00:00:00 0 -2021-02-28T00:00:00 0 -2021-03-01T00:00:00 0 -2021-03-02T00:00:00 0 -2021-03-03T00:00:00 0 -2021-03-04T00:00:00 0 -2021-03-05T00:00:00 0 -2021-03-06T00:00:00 0 -2021-03-07T00:00:00 0 -2021-03-08T00:00:00 0 -2021-03-09T00:00:00 0 -2021-03-10T00:00:00 0 -2021-03-11T00:00:00 0 -2021-03-12T00:00:00 0 -2021-03-13T00:00:00 0 -2021-03-14T00:00:00 0 -2021-03-15T00:00:00 0 -2021-03-16T00:00:00 0 -2021-03-17T00:00:00 0 -2021-03-18T00:00:00 0 -2021-03-19T00:00:00 0 -2021-03-20T00:00:00 0 -2021-03-21T00:00:00 0 -2021-03-22T00:00:00 0 -2021-03-23T00:00:00 0 -2021-03-24T00:00:00 0 -2021-03-25T00:00:00 0 -2021-03-26T00:00:00 0 -2021-03-27T00:00:00 0 -2021-03-28T00:00:00 0 -2021-03-29T00:00:00 0 -2021-03-30T00:00:00 0 -2021-03-31T00:00:00 0 -2021-04-01T00:00:00 0 -2021-04-02T00:00:00 0 -2021-04-03T00:00:00 0 -2021-04-04T00:00:00 0 -2021-04-05T00:00:00 0 -2021-04-06T00:00:00 0 -2021-04-07T00:00:00 0 -2021-04-08T00:00:00 0 -2021-04-09T00:00:00 0 -2021-04-10T00:00:00 0 -2021-04-11T00:00:00 0 -2021-04-12T00:00:00 0 -2021-04-13T00:00:00 0 -2021-04-14T00:00:00 0 -2021-04-15T00:00:00 0 -2021-04-16T00:00:00 0 -2021-04-17T00:00:00 0 -2021-04-18T00:00:00 0 -2021-04-19T00:00:00 0 -2021-04-20T00:00:00 0 -2021-04-21T00:00:00 0 -2021-04-22T00:00:00 0 -2021-04-23T00:00:00 0 -2021-04-24T00:00:00 0 -2021-04-25T00:00:00 0 -2021-04-26T00:00:00 0 -2021-04-27T00:00:00 0 -2021-04-28T00:00:00 0 -2021-04-29T00:00:00 0 -2021-04-30T00:00:00 0 -2021-05-01T00:00:00 0 -2021-05-02T00:00:00 0 -2021-05-03T00:00:00 0 -2021-05-04T00:00:00 0 -2021-05-05T00:00:00 0 -2021-05-06T00:00:00 0 -2021-05-07T00:00:00 0 -2021-05-08T00:00:00 0 -2021-05-09T00:00:00 0 -2021-05-10T00:00:00 0 -2021-05-11T00:00:00 0 -2021-05-12T00:00:00 0 -2021-05-13T00:00:00 0 -2021-05-14T00:00:00 0 -2021-05-15T00:00:00 0 -2021-05-16T00:00:00 0 -2021-05-17T00:00:00 0 -2021-05-18T00:00:00 0 -2021-05-19T00:00:00 0 -2021-05-20T00:00:00 0 -2021-05-21T00:00:00 0 -2021-05-22T00:00:00 0 -2021-05-23T00:00:00 0 -2021-05-24T00:00:00 0 -2021-05-25T00:00:00 0 -2021-05-26T00:00:00 0 -2021-05-27T00:00:00 0 -2021-05-28T00:00:00 0 -2021-05-29T00:00:00 0 -2021-05-30T00:00:00 0 -2021-05-31T00:00:00 0 -2021-06-01T00:00:00 0 -2021-06-02T00:00:00 0 -2021-06-03T00:00:00 0 -2021-06-04T00:00:00 0 -2021-06-05T00:00:00 0 -2021-06-06T00:00:00 0 -2021-06-07T00:00:00 0 -2021-06-08T00:00:00 0 -2021-06-09T00:00:00 0 -2021-06-10T00:00:00 0 -2021-06-11T00:00:00 0 -2021-06-12T00:00:00 0 -2021-06-13T00:00:00 0 -2021-06-14T00:00:00 0 -2021-06-15T00:00:00 0 -2021-06-16T00:00:00 0 -2021-06-17T00:00:00 0 -2021-06-18T00:00:00 0 -2021-06-19T00:00:00 0 -2021-06-20T00:00:00 0 -2021-06-21T00:00:00 0 -2021-06-22T00:00:00 0 -2021-06-23T00:00:00 0 -2021-06-24T00:00:00 0 -2021-06-25T00:00:00 0 -2021-06-26T00:00:00 0 -2021-06-27T00:00:00 0 -2021-06-28T00:00:00 0 -2021-06-29T00:00:00 0 -2021-06-30T00:00:00 0 -2021-07-01T00:00:00 0 -2021-07-02T00:00:00 0 -2021-07-03T00:00:00 0 -2021-07-04T00:00:00 0 -2021-07-05T00:00:00 0 -2021-07-06T00:00:00 0 -2021-07-07T00:00:00 0 -2021-07-08T00:00:00 0 -2021-07-09T00:00:00 0 -2021-07-10T00:00:00 0 -2021-07-11T00:00:00 0 -2021-07-12T00:00:00 0 -2021-07-13T00:00:00 0 -2021-07-14T00:00:00 0 -2021-07-15T00:00:00 0 -2021-07-16T00:00:00 0 -2021-07-17T00:00:00 0 -2021-07-18T00:00:00 0 -2021-07-19T00:00:00 0 -2021-07-20T00:00:00 0 -2021-07-21T00:00:00 0 -2021-07-22T00:00:00 0 -2021-07-23T00:00:00 0 -2021-07-24T00:00:00 0 -2021-07-25T00:00:00 0 -2021-07-26T00:00:00 0 -2021-07-27T00:00:00 0 -2021-07-28T00:00:00 0 -2021-07-29T00:00:00 0 -2021-07-30T00:00:00 0 -2021-07-31T00:00:00 0 -2021-08-01T00:00:00 0 -2021-08-02T00:00:00 0 -2021-08-03T00:00:00 0 -2021-08-04T00:00:00 0 -2021-08-05T00:00:00 0 -2021-08-06T00:00:00 0 -2021-08-07T00:00:00 0 -2021-08-08T00:00:00 0 -2021-08-09T00:00:00 0 -2021-08-10T00:00:00 0 -2021-08-11T00:00:00 0 -2021-08-12T00:00:00 0 -2021-08-13T00:00:00 0 -2021-08-14T00:00:00 0 -2021-08-15T00:00:00 0 -2021-08-16T00:00:00 0 -2021-08-17T00:00:00 0 -2021-08-18T00:00:00 0 -2021-08-19T00:00:00 0 -2021-08-20T00:00:00 0 -2021-08-21T00:00:00 0 -2021-08-22T00:00:00 0 -2021-08-23T00:00:00 0 -2021-08-24T00:00:00 0 -2021-08-25T00:00:00 0 -2021-08-26T00:00:00 0 -2021-08-27T00:00:00 0 -2021-08-28T00:00:00 0 -2021-08-29T00:00:00 0 -2021-08-30T00:00:00 0 -2021-08-31T00:00:00 0 -2021-09-01T00:00:00 0 -2021-09-02T00:00:00 0 -2021-09-03T00:00:00 0 -2021-09-04T00:00:00 0 -2021-09-05T00:00:00 0 -2021-09-06T00:00:00 0 -2021-09-07T00:00:00 0 -2021-09-08T00:00:00 0 -2021-09-09T00:00:00 0 -2021-09-10T00:00:00 0 -2021-09-11T00:00:00 0 -2021-09-12T00:00:00 0 -2021-09-13T00:00:00 0 -2021-09-14T00:00:00 0 -2021-09-15T00:00:00 0 -2021-09-16T00:00:00 0 -2021-09-17T00:00:00 0 -2021-09-18T00:00:00 0 -2021-09-19T00:00:00 0 -2021-09-20T00:00:00 0 -2021-09-21T00:00:00 0 -2021-09-22T00:00:00 0 -2021-09-23T00:00:00 0 -2021-09-24T00:00:00 0 -2021-09-25T00:00:00 0 -2021-09-26T00:00:00 0 -2021-09-27T00:00:00 0 -2021-09-28T00:00:00 0 -2021-09-29T00:00:00 0 -2021-09-30T00:00:00 0 -2021-10-01T00:00:00 0 -2021-10-02T00:00:00 0 -2021-10-03T00:00:00 0 -2021-10-04T00:00:00 0 -2021-10-05T00:00:00 0 -2021-10-06T00:00:00 0 -2021-10-07T00:00:00 0 -2021-10-08T00:00:00 0 -2021-10-09T00:00:00 0 -2021-10-10T00:00:00 0 -2021-10-11T00:00:00 0 -2021-10-12T00:00:00 0 -2021-10-13T00:00:00 0 -2021-10-14T00:00:00 0 -2021-10-15T00:00:00 0 -2021-10-16T00:00:00 0 -2021-10-17T00:00:00 0 -2021-10-18T00:00:00 0 -2021-10-19T00:00:00 0 -2021-10-20T00:00:00 0 -2021-10-21T00:00:00 0 -2021-10-22T00:00:00 0 -2021-10-23T00:00:00 0 -2021-10-24T00:00:00 0 -2021-10-25T00:00:00 0 -2021-10-26T00:00:00 0 -2021-10-27T00:00:00 0 -2021-10-28T00:00:00 0 -2021-10-29T00:00:00 0 -2021-10-30T00:00:00 0 -2021-10-31T00:00:00 0 -2021-11-01T00:00:00 0 -2021-11-02T00:00:00 0 -2021-11-03T00:00:00 0 -2021-11-04T00:00:00 0 -2021-11-05T00:00:00 0 -2021-11-06T00:00:00 0 -2021-11-07T00:00:00 0 -2021-11-08T00:00:00 0 -2021-11-09T00:00:00 0 -2021-11-10T00:00:00 0 -2021-11-11T00:00:00 0 -2021-11-12T00:00:00 0 -2021-11-13T00:00:00 0 -2021-11-14T00:00:00 0 -2021-11-15T00:00:00 0 -2021-11-16T00:00:00 0 -2021-11-17T00:00:00 0 -2021-11-18T00:00:00 0 -2021-11-19T00:00:00 0 -2021-11-20T00:00:00 0 -2021-11-21T00:00:00 0 -2021-11-22T00:00:00 0 -2021-11-23T00:00:00 0 -2021-11-24T00:00:00 0 -2021-11-25T00:00:00 0 +2019-03-02T00:00:00 None +2019-03-03T00:00:00 None +2019-03-04T00:00:00 None +2019-03-05T00:00:00 None +2019-03-06T00:00:00 None +2019-03-07T00:00:00 None +2019-03-08T00:00:00 None +2019-03-09T00:00:00 None +2019-03-10T00:00:00 None +2019-03-11T00:00:00 None +2019-03-12T00:00:00 None +2019-03-13T00:00:00 None +2019-03-14T00:00:00 None +2019-03-15T00:00:00 None +2019-03-16T00:00:00 None +2019-03-17T00:00:00 None +2019-03-18T00:00:00 None +2019-03-19T00:00:00 None +2019-03-20T00:00:00 None +2019-03-21T00:00:00 None +2019-03-22T00:00:00 None +2019-03-23T00:00:00 None +2019-03-24T00:00:00 None +2019-03-25T00:00:00 None +2019-03-26T00:00:00 None +2019-03-27T00:00:00 None +2019-03-28T00:00:00 None +2019-03-29T00:00:00 None +2019-03-30T00:00:00 None +2019-03-31T00:00:00 None +2019-04-01T00:00:00 None +2019-04-02T00:00:00 None +2019-04-03T00:00:00 None +2019-04-04T00:00:00 None +2019-04-05T00:00:00 None +2019-04-06T00:00:00 None +2019-04-07T00:00:00 None +2019-04-08T00:00:00 None +2019-04-09T00:00:00 None +2019-04-10T00:00:00 None +2019-04-11T00:00:00 None +2019-04-12T00:00:00 None +2019-04-13T00:00:00 None +2019-04-14T00:00:00 None +2019-04-15T00:00:00 None +2019-04-16T00:00:00 None +2019-04-17T00:00:00 None +2019-04-18T00:00:00 None +2019-04-19T00:00:00 None +2019-04-20T00:00:00 None +2019-04-21T00:00:00 None +2019-04-22T00:00:00 None +2019-04-23T00:00:00 None +2019-04-24T00:00:00 None +2019-04-25T00:00:00 None +2019-04-26T00:00:00 None +2019-04-27T00:00:00 None +2019-04-28T00:00:00 None +2019-04-29T00:00:00 None +2019-04-30T00:00:00 None +2019-05-01T00:00:00 None +2019-05-02T00:00:00 None +2019-05-03T00:00:00 None +2019-05-04T00:00:00 None +2019-05-05T00:00:00 None +2019-05-06T00:00:00 None +2019-05-07T00:00:00 None +2019-05-08T00:00:00 None +2019-05-09T00:00:00 None +2019-05-10T00:00:00 None +2019-05-11T00:00:00 None +2019-05-12T00:00:00 None +2019-05-13T00:00:00 None +2019-05-14T00:00:00 None +2019-05-15T00:00:00 None +2019-05-16T00:00:00 None +2019-05-17T00:00:00 None +2019-05-18T00:00:00 None +2019-05-19T00:00:00 None +2019-05-20T00:00:00 None +2019-05-21T00:00:00 None +2019-05-22T00:00:00 None +2019-05-23T00:00:00 None +2019-05-24T00:00:00 None +2019-05-25T00:00:00 None +2019-05-26T00:00:00 None +2019-05-27T00:00:00 None +2019-05-28T00:00:00 None +2019-05-29T00:00:00 None +2019-05-30T00:00:00 None +2019-05-31T00:00:00 None +2019-06-01T00:00:00 None +2019-06-02T00:00:00 None +2019-06-03T00:00:00 None +2019-06-04T00:00:00 None +2019-06-05T00:00:00 None +2019-06-06T00:00:00 None +2019-06-07T00:00:00 None +2019-06-08T00:00:00 None +2019-06-09T00:00:00 None +2019-06-10T00:00:00 None +2019-06-11T00:00:00 None +2019-06-12T00:00:00 None +2019-06-13T00:00:00 None +2019-06-14T00:00:00 None +2019-06-15T00:00:00 None +2019-06-16T00:00:00 None +2019-06-17T00:00:00 None +2019-06-18T00:00:00 None +2019-06-19T00:00:00 None +2019-06-20T00:00:00 None +2019-06-21T00:00:00 None +2019-06-22T00:00:00 None +2019-06-23T00:00:00 None +2019-06-24T00:00:00 None +2019-06-25T00:00:00 None +2019-06-26T00:00:00 None +2019-06-27T00:00:00 None +2019-06-28T00:00:00 None +2019-06-29T00:00:00 None +2019-06-30T00:00:00 None +2019-07-01T00:00:00 None +2019-07-02T00:00:00 None +2019-07-03T00:00:00 None +2019-07-04T00:00:00 None +2019-07-05T00:00:00 None +2019-07-06T00:00:00 None +2019-07-07T00:00:00 None +2019-07-08T00:00:00 None +2019-07-09T00:00:00 None +2019-07-10T00:00:00 None +2019-07-11T00:00:00 None +2019-07-12T00:00:00 None +2019-07-13T00:00:00 None +2019-07-14T00:00:00 None +2019-07-15T00:00:00 None +2019-07-16T00:00:00 None +2019-07-17T00:00:00 None +2019-07-18T00:00:00 None +2019-07-19T00:00:00 None +2019-07-20T00:00:00 None +2019-07-21T00:00:00 None +2019-07-22T00:00:00 None +2019-07-23T00:00:00 None +2019-07-24T00:00:00 None +2019-07-25T00:00:00 None +2019-07-26T00:00:00 None +2019-07-27T00:00:00 None +2019-07-28T00:00:00 None +2019-07-29T00:00:00 None +2019-07-30T00:00:00 None +2019-07-31T00:00:00 None +2019-08-01T00:00:00 None +2019-08-02T00:00:00 None +2019-08-03T00:00:00 None +2019-08-04T00:00:00 None +2019-08-05T00:00:00 None +2019-08-06T00:00:00 None +2019-08-07T00:00:00 None +2019-08-08T00:00:00 None +2019-08-09T00:00:00 None +2019-08-10T00:00:00 None +2019-08-11T00:00:00 None +2019-08-12T00:00:00 None +2019-08-13T00:00:00 None +2019-08-14T00:00:00 None +2019-08-15T00:00:00 None +2019-08-16T00:00:00 None +2019-08-17T00:00:00 None +2019-08-18T00:00:00 None +2019-08-19T00:00:00 None +2019-08-20T00:00:00 None +2019-08-21T00:00:00 None +2019-08-22T00:00:00 None +2019-08-23T00:00:00 None +2019-08-24T00:00:00 None +2019-08-25T00:00:00 None +2019-08-26T00:00:00 None +2019-08-27T00:00:00 None +2019-08-28T00:00:00 None +2019-08-29T00:00:00 None +2019-08-30T00:00:00 None +2019-08-31T00:00:00 None +2019-09-01T00:00:00 None +2019-09-02T00:00:00 None +2019-09-03T00:00:00 None +2019-09-04T00:00:00 None +2019-09-05T00:00:00 None +2019-09-06T00:00:00 None +2019-09-07T00:00:00 None +2019-09-08T00:00:00 None +2019-09-09T00:00:00 None +2019-09-10T00:00:00 None +2019-09-11T00:00:00 None +2019-09-12T00:00:00 None +2019-09-13T00:00:00 None +2019-09-14T00:00:00 None +2019-09-15T00:00:00 None +2019-09-16T00:00:00 None +2019-09-17T00:00:00 None +2019-09-18T00:00:00 None +2019-09-19T00:00:00 None +2019-09-20T00:00:00 None +2019-09-21T00:00:00 None +2019-09-22T00:00:00 None +2019-09-23T00:00:00 None +2019-09-24T00:00:00 None +2019-09-25T00:00:00 None +2019-09-26T00:00:00 None +2019-09-27T00:00:00 None +2019-09-28T00:00:00 None +2019-09-29T00:00:00 None +2019-09-30T00:00:00 None +2019-10-01T00:00:00 None +2019-10-02T00:00:00 None +2019-10-03T00:00:00 None +2019-10-04T00:00:00 None +2019-10-05T00:00:00 None +2019-10-06T00:00:00 None +2019-10-07T00:00:00 None +2019-10-08T00:00:00 None +2019-10-09T00:00:00 None +2019-10-10T00:00:00 None +2019-10-11T00:00:00 None +2019-10-12T00:00:00 None +2019-10-13T00:00:00 None +2019-10-14T00:00:00 None +2019-10-15T00:00:00 None +2019-10-16T00:00:00 None +2019-10-17T00:00:00 None +2019-10-18T00:00:00 None +2019-10-19T00:00:00 None +2019-10-20T00:00:00 None +2019-10-21T00:00:00 None +2019-10-22T00:00:00 None +2019-10-23T00:00:00 None +2019-10-24T00:00:00 None +2019-10-25T00:00:00 None +2019-10-26T00:00:00 None +2019-10-27T00:00:00 None +2019-10-28T00:00:00 None +2019-10-29T00:00:00 None +2019-10-30T00:00:00 None +2019-10-31T00:00:00 None +2019-11-01T00:00:00 None +2019-11-02T00:00:00 None +2019-11-03T00:00:00 None +2019-11-04T00:00:00 None +2019-11-05T00:00:00 None +2019-11-06T00:00:00 None +2019-11-07T00:00:00 None +2019-11-08T00:00:00 None +2019-11-09T00:00:00 None +2019-11-10T00:00:00 None +2019-11-11T00:00:00 None +2019-11-12T00:00:00 None +2019-11-13T00:00:00 None +2019-11-14T00:00:00 None +2019-11-15T00:00:00 None +2019-11-16T00:00:00 None +2019-11-17T00:00:00 None +2019-11-18T00:00:00 None +2019-11-19T00:00:00 None +2019-11-20T00:00:00 None +2019-11-21T00:00:00 None +2019-11-22T00:00:00 None +2019-11-23T00:00:00 None +2019-11-24T00:00:00 None +2019-11-25T00:00:00 None +2019-11-26T00:00:00 None +2019-11-27T00:00:00 None +2019-11-28T00:00:00 None +2019-11-29T00:00:00 None +2019-11-30T00:00:00 None +2019-12-01T00:00:00 1 +2019-12-02T00:00:00 None +2019-12-03T00:00:00 None +2019-12-04T00:00:00 None +2019-12-05T00:00:00 None +2019-12-06T00:00:00 None +2019-12-07T00:00:00 None +2019-12-08T00:00:00 None +2019-12-09T00:00:00 None +2019-12-10T00:00:00 None +2019-12-11T00:00:00 None +2019-12-12T00:00:00 None +2019-12-13T00:00:00 None +2019-12-14T00:00:00 None +2019-12-15T00:00:00 None +2019-12-16T00:00:00 None +2019-12-17T00:00:00 None +2019-12-18T00:00:00 10 +2019-12-19T00:00:00 18 +2019-12-20T00:00:00 2 +2019-12-21T00:00:00 None +2019-12-22T00:00:00 None +2019-12-23T00:00:00 None +2019-12-24T00:00:00 None +2019-12-25T00:00:00 None +2019-12-26T00:00:00 None +2019-12-27T00:00:00 None +2019-12-28T00:00:00 None +2019-12-29T00:00:00 None +2019-12-30T00:00:00 None +2019-12-31T00:00:00 None +2020-01-01T00:00:00 5 +2020-01-02T00:00:00 9 +2020-01-03T00:00:00 1 +2020-01-04T00:00:00 None +2020-01-05T00:00:00 None +2020-01-06T00:00:00 None +2020-01-07T00:00:00 None +2020-01-08T00:00:00 None +2020-01-09T00:00:00 None +2020-01-10T00:00:00 None +2020-01-11T00:00:00 None +2020-01-12T00:00:00 None +2020-01-13T00:00:00 None +2020-01-14T00:00:00 None +2020-01-15T00:00:00 None +2020-01-16T00:00:00 None +2020-01-17T00:00:00 None +2020-01-18T00:00:00 None +2020-01-19T00:00:00 None +2020-01-20T00:00:00 None +2020-01-21T00:00:00 None +2020-01-22T00:00:00 None +2020-01-23T00:00:00 None +2020-01-24T00:00:00 None +2020-01-25T00:00:00 None +2020-01-26T00:00:00 None +2020-01-27T00:00:00 None +2020-01-28T00:00:00 None +2020-01-29T00:00:00 None +2020-01-30T00:00:00 None +2020-01-31T00:00:00 None +2020-02-01T00:00:00 None +2020-02-02T00:00:00 None +2020-02-03T00:00:00 None +2020-02-04T00:00:00 None +2020-02-05T00:00:00 None +2020-02-06T00:00:00 None +2020-02-07T00:00:00 None +2020-02-08T00:00:00 None +2020-02-09T00:00:00 None +2020-02-10T00:00:00 None +2020-02-11T00:00:00 None +2020-02-12T00:00:00 None +2020-02-13T00:00:00 None +2020-02-14T00:00:00 None +2020-02-15T00:00:00 None +2020-02-16T00:00:00 None +2020-02-17T00:00:00 None +2020-02-18T00:00:00 None +2020-02-19T00:00:00 None +2020-02-20T00:00:00 None +2020-02-21T00:00:00 None +2020-02-22T00:00:00 None +2020-02-23T00:00:00 None +2020-02-24T00:00:00 None +2020-02-25T00:00:00 None +2020-02-26T00:00:00 None +2020-02-27T00:00:00 None +2020-02-28T00:00:00 None +2020-02-29T00:00:00 None +2020-03-01T00:00:00 None +2020-03-02T00:00:00 None +2020-03-03T00:00:00 None +2020-03-04T00:00:00 None +2020-03-05T00:00:00 None +2020-03-06T00:00:00 None +2020-03-07T00:00:00 None +2020-03-08T00:00:00 None +2020-03-09T00:00:00 None +2020-03-10T00:00:00 None +2020-03-11T00:00:00 None +2020-03-12T00:00:00 None +2020-03-13T00:00:00 None +2020-03-14T00:00:00 None +2020-03-15T00:00:00 None +2020-03-16T00:00:00 None +2020-03-17T00:00:00 None +2020-03-18T00:00:00 None +2020-03-19T00:00:00 None +2020-03-20T00:00:00 None +2020-03-21T00:00:00 None +2020-03-22T00:00:00 None +2020-03-23T00:00:00 None +2020-03-24T00:00:00 None +2020-03-25T00:00:00 None +2020-03-26T00:00:00 None +2020-03-27T00:00:00 None +2020-03-28T00:00:00 None +2020-03-29T00:00:00 None +2020-03-30T00:00:00 None +2020-03-31T00:00:00 None +2020-04-01T00:00:00 None +2020-04-02T00:00:00 None +2020-04-03T00:00:00 None +2020-04-04T00:00:00 None +2020-04-05T00:00:00 None +2020-04-06T00:00:00 None +2020-04-07T00:00:00 None +2020-04-08T00:00:00 None +2020-04-09T00:00:00 None +2020-04-10T00:00:00 None +2020-04-11T00:00:00 None +2020-04-12T00:00:00 None +2020-04-13T00:00:00 None +2020-04-14T00:00:00 None +2020-04-15T00:00:00 None +2020-04-16T00:00:00 None +2020-04-17T00:00:00 None +2020-04-18T00:00:00 None +2020-04-19T00:00:00 None +2020-04-20T00:00:00 None +2020-04-21T00:00:00 None +2020-04-22T00:00:00 None +2020-04-23T00:00:00 None +2020-04-24T00:00:00 None +2020-04-25T00:00:00 None +2020-04-26T00:00:00 None +2020-04-27T00:00:00 None +2020-04-28T00:00:00 None +2020-04-29T00:00:00 None +2020-04-30T00:00:00 None +2020-05-01T00:00:00 None +2020-05-02T00:00:00 None +2020-05-03T00:00:00 None +2020-05-04T00:00:00 None +2020-05-05T00:00:00 None +2020-05-06T00:00:00 None +2020-05-07T00:00:00 None +2020-05-08T00:00:00 None +2020-05-09T00:00:00 None +2020-05-10T00:00:00 None +2020-05-11T00:00:00 None +2020-05-12T00:00:00 None +2020-05-13T00:00:00 None +2020-05-14T00:00:00 None +2020-05-15T00:00:00 None +2020-05-16T00:00:00 None +2020-05-17T00:00:00 None +2020-05-18T00:00:00 None +2020-05-19T00:00:00 None +2020-05-20T00:00:00 None +2020-05-21T00:00:00 None +2020-05-22T00:00:00 None +2020-05-23T00:00:00 None +2020-05-24T00:00:00 None +2020-05-25T00:00:00 None +2020-05-26T00:00:00 None +2020-05-27T00:00:00 None +2020-05-28T00:00:00 None +2020-05-29T00:00:00 None +2020-05-30T00:00:00 None +2020-05-31T00:00:00 None +2020-06-01T00:00:00 None +2020-06-02T00:00:00 None +2020-06-03T00:00:00 None +2020-06-04T00:00:00 None +2020-06-05T00:00:00 None +2020-06-06T00:00:00 None +2020-06-07T00:00:00 None +2020-06-08T00:00:00 None +2020-06-09T00:00:00 None +2020-06-10T00:00:00 None +2020-06-11T00:00:00 None +2020-06-12T00:00:00 None +2020-06-13T00:00:00 None +2020-06-14T00:00:00 None +2020-06-15T00:00:00 None +2020-06-16T00:00:00 None +2020-06-17T00:00:00 None +2020-06-18T00:00:00 None +2020-06-19T00:00:00 None +2020-06-20T00:00:00 None +2020-06-21T00:00:00 None +2020-06-22T00:00:00 None +2020-06-23T00:00:00 None +2020-06-24T00:00:00 None +2020-06-25T00:00:00 None +2020-06-26T00:00:00 None +2020-06-27T00:00:00 None +2020-06-28T00:00:00 None +2020-06-29T00:00:00 None +2020-06-30T00:00:00 None +2020-07-01T00:00:00 None +2020-07-02T00:00:00 None +2020-07-03T00:00:00 None +2020-07-04T00:00:00 None +2020-07-05T00:00:00 None +2020-07-06T00:00:00 None +2020-07-07T00:00:00 None +2020-07-08T00:00:00 None +2020-07-09T00:00:00 None +2020-07-10T00:00:00 None +2020-07-11T00:00:00 None +2020-07-12T00:00:00 None +2020-07-13T00:00:00 None +2020-07-14T00:00:00 None +2020-07-15T00:00:00 None +2020-07-16T00:00:00 None +2020-07-17T00:00:00 None +2020-07-18T00:00:00 None +2020-07-19T00:00:00 None +2020-07-20T00:00:00 None +2020-07-21T00:00:00 None +2020-07-22T00:00:00 None +2020-07-23T00:00:00 None +2020-07-24T00:00:00 None +2020-07-25T00:00:00 None +2020-07-26T00:00:00 None +2020-07-27T00:00:00 None +2020-07-28T00:00:00 None +2020-07-29T00:00:00 None +2020-07-30T00:00:00 None +2020-07-31T00:00:00 None +2020-08-01T00:00:00 None +2020-08-02T00:00:00 None +2020-08-03T00:00:00 None +2020-08-04T00:00:00 None +2020-08-05T00:00:00 None +2020-08-06T00:00:00 None +2020-08-07T00:00:00 None +2020-08-08T00:00:00 None +2020-08-09T00:00:00 None +2020-08-10T00:00:00 None +2020-08-11T00:00:00 None +2020-08-12T00:00:00 None +2020-08-13T00:00:00 None +2020-08-14T00:00:00 None +2020-08-15T00:00:00 None +2020-08-16T00:00:00 None +2020-08-17T00:00:00 None +2020-08-18T00:00:00 None +2020-08-19T00:00:00 None +2020-08-20T00:00:00 None +2020-08-21T00:00:00 None +2020-08-22T00:00:00 None +2020-08-23T00:00:00 None +2020-08-24T00:00:00 None +2020-08-25T00:00:00 None +2020-08-26T00:00:00 None +2020-08-27T00:00:00 None +2020-08-28T00:00:00 None +2020-08-29T00:00:00 None +2020-08-30T00:00:00 None +2020-08-31T00:00:00 None +2020-09-01T00:00:00 None +2020-09-02T00:00:00 None +2020-09-03T00:00:00 None +2020-09-04T00:00:00 None +2020-09-05T00:00:00 None +2020-09-06T00:00:00 None +2020-09-07T00:00:00 None +2020-09-08T00:00:00 None +2020-09-09T00:00:00 None +2020-09-10T00:00:00 None +2020-09-11T00:00:00 None +2020-09-12T00:00:00 None +2020-09-13T00:00:00 None +2020-09-14T00:00:00 None +2020-09-15T00:00:00 None +2020-09-16T00:00:00 None +2020-09-17T00:00:00 None +2020-09-18T00:00:00 None +2020-09-19T00:00:00 None +2020-09-20T00:00:00 None +2020-09-21T00:00:00 None +2020-09-22T00:00:00 None +2020-09-23T00:00:00 None +2020-09-24T00:00:00 None +2020-09-25T00:00:00 None +2020-09-26T00:00:00 None +2020-09-27T00:00:00 None +2020-09-28T00:00:00 None +2020-09-29T00:00:00 None +2020-09-30T00:00:00 None +2020-10-01T00:00:00 None +2020-10-02T00:00:00 None +2020-10-03T00:00:00 None +2020-10-04T00:00:00 None +2020-10-05T00:00:00 None +2020-10-06T00:00:00 None +2020-10-07T00:00:00 None +2020-10-08T00:00:00 None +2020-10-09T00:00:00 None +2020-10-10T00:00:00 None +2020-10-11T00:00:00 None +2020-10-12T00:00:00 None +2020-10-13T00:00:00 None +2020-10-14T00:00:00 None +2020-10-15T00:00:00 None +2020-10-16T00:00:00 None +2020-10-17T00:00:00 None +2020-10-18T00:00:00 None +2020-10-19T00:00:00 None +2020-10-20T00:00:00 None +2020-10-21T00:00:00 None +2020-10-22T00:00:00 None +2020-10-23T00:00:00 None +2020-10-24T00:00:00 None +2020-10-25T00:00:00 None +2020-10-26T00:00:00 None +2020-10-27T00:00:00 None +2020-10-28T00:00:00 None +2020-10-29T00:00:00 None +2020-10-30T00:00:00 None +2020-10-31T00:00:00 None +2020-11-01T00:00:00 None +2020-11-02T00:00:00 None +2020-11-03T00:00:00 None +2020-11-04T00:00:00 None +2020-11-05T00:00:00 None +2020-11-06T00:00:00 None +2020-11-07T00:00:00 None +2020-11-08T00:00:00 None +2020-11-09T00:00:00 None +2020-11-10T00:00:00 None +2020-11-11T00:00:00 None +2020-11-12T00:00:00 None +2020-11-13T00:00:00 None +2020-11-14T00:00:00 None +2020-11-15T00:00:00 None +2020-11-16T00:00:00 None +2020-11-17T00:00:00 None +2020-11-18T00:00:00 None +2020-11-19T00:00:00 None +2020-11-20T00:00:00 None +2020-11-21T00:00:00 None +2020-11-22T00:00:00 None +2020-11-23T00:00:00 None +2020-11-24T00:00:00 None +2020-11-25T00:00:00 None +2020-11-26T00:00:00 None +2020-11-27T00:00:00 None +2020-11-28T00:00:00 None +2020-11-29T00:00:00 None +2020-11-30T00:00:00 None +2020-12-01T00:00:00 None +2020-12-02T00:00:00 None +2020-12-03T00:00:00 None +2020-12-04T00:00:00 None +2020-12-05T00:00:00 None +2020-12-06T00:00:00 None +2020-12-07T00:00:00 None +2020-12-08T00:00:00 None +2020-12-09T00:00:00 None +2020-12-10T00:00:00 None +2020-12-11T00:00:00 None +2020-12-12T00:00:00 None +2020-12-13T00:00:00 None +2020-12-14T00:00:00 None +2020-12-15T00:00:00 None +2020-12-16T00:00:00 None +2020-12-17T00:00:00 None +2020-12-18T00:00:00 None +2020-12-19T00:00:00 None +2020-12-20T00:00:00 None +2020-12-21T00:00:00 None +2020-12-22T00:00:00 None +2020-12-23T00:00:00 None +2020-12-24T00:00:00 None +2020-12-25T00:00:00 None +2020-12-26T00:00:00 None +2020-12-27T00:00:00 None +2020-12-28T00:00:00 None +2020-12-29T00:00:00 None +2020-12-30T00:00:00 None +2020-12-31T00:00:00 None +2021-01-01T00:00:00 None +2021-01-02T00:00:00 None +2021-01-03T00:00:00 None +2021-01-04T00:00:00 None +2021-01-05T00:00:00 None +2021-01-06T00:00:00 None +2021-01-07T00:00:00 None +2021-01-08T00:00:00 None +2021-01-09T00:00:00 None +2021-01-10T00:00:00 None +2021-01-11T00:00:00 None +2021-01-12T00:00:00 None +2021-01-13T00:00:00 None +2021-01-14T00:00:00 None +2021-01-15T00:00:00 None +2021-01-16T00:00:00 None +2021-01-17T00:00:00 None +2021-01-18T00:00:00 None +2021-01-19T00:00:00 None +2021-01-20T00:00:00 None +2021-01-21T00:00:00 None +2021-01-22T00:00:00 None +2021-01-23T00:00:00 None +2021-01-24T00:00:00 None +2021-01-25T00:00:00 None +2021-01-26T00:00:00 None +2021-01-27T00:00:00 None +2021-01-28T00:00:00 None +2021-01-29T00:00:00 None +2021-01-30T00:00:00 None +2021-01-31T00:00:00 None +2021-02-01T00:00:00 None +2021-02-02T00:00:00 None +2021-02-03T00:00:00 None +2021-02-04T00:00:00 None +2021-02-05T00:00:00 None +2021-02-06T00:00:00 None +2021-02-07T00:00:00 None +2021-02-08T00:00:00 None +2021-02-09T00:00:00 None +2021-02-10T00:00:00 None +2021-02-11T00:00:00 None +2021-02-12T00:00:00 None +2021-02-13T00:00:00 None +2021-02-14T00:00:00 None +2021-02-15T00:00:00 None +2021-02-16T00:00:00 None +2021-02-17T00:00:00 None +2021-02-18T00:00:00 None +2021-02-19T00:00:00 None +2021-02-20T00:00:00 None +2021-02-21T00:00:00 None +2021-02-22T00:00:00 None +2021-02-23T00:00:00 None +2021-02-24T00:00:00 None +2021-02-25T00:00:00 None +2021-02-26T00:00:00 None +2021-02-27T00:00:00 None +2021-02-28T00:00:00 None +2021-03-01T00:00:00 None +2021-03-02T00:00:00 None +2021-03-03T00:00:00 None +2021-03-04T00:00:00 None +2021-03-05T00:00:00 None +2021-03-06T00:00:00 None +2021-03-07T00:00:00 None +2021-03-08T00:00:00 None +2021-03-09T00:00:00 None +2021-03-10T00:00:00 None +2021-03-11T00:00:00 None +2021-03-12T00:00:00 None +2021-03-13T00:00:00 None +2021-03-14T00:00:00 None +2021-03-15T00:00:00 None +2021-03-16T00:00:00 None +2021-03-17T00:00:00 None +2021-03-18T00:00:00 None +2021-03-19T00:00:00 None +2021-03-20T00:00:00 None +2021-03-21T00:00:00 None +2021-03-22T00:00:00 None +2021-03-23T00:00:00 None +2021-03-24T00:00:00 None +2021-03-25T00:00:00 None +2021-03-26T00:00:00 None +2021-03-27T00:00:00 None +2021-03-28T00:00:00 None +2021-03-29T00:00:00 None +2021-03-30T00:00:00 None +2021-03-31T00:00:00 None +2021-04-01T00:00:00 None +2021-04-02T00:00:00 None +2021-04-03T00:00:00 None +2021-04-04T00:00:00 None +2021-04-05T00:00:00 None +2021-04-06T00:00:00 None +2021-04-07T00:00:00 None +2021-04-08T00:00:00 None +2021-04-09T00:00:00 None +2021-04-10T00:00:00 None +2021-04-11T00:00:00 None +2021-04-12T00:00:00 None +2021-04-13T00:00:00 None +2021-04-14T00:00:00 None +2021-04-15T00:00:00 None +2021-04-16T00:00:00 None +2021-04-17T00:00:00 None +2021-04-18T00:00:00 None +2021-04-19T00:00:00 None +2021-04-20T00:00:00 None +2021-04-21T00:00:00 None +2021-04-22T00:00:00 None +2021-04-23T00:00:00 None +2021-04-24T00:00:00 None +2021-04-25T00:00:00 None +2021-04-26T00:00:00 None +2021-04-27T00:00:00 None +2021-04-28T00:00:00 None +2021-04-29T00:00:00 None +2021-04-30T00:00:00 None +2021-05-01T00:00:00 None +2021-05-02T00:00:00 None +2021-05-03T00:00:00 None +2021-05-04T00:00:00 None +2021-05-05T00:00:00 None +2021-05-06T00:00:00 None +2021-05-07T00:00:00 None +2021-05-08T00:00:00 None +2021-05-09T00:00:00 None +2021-05-10T00:00:00 None +2021-05-11T00:00:00 None +2021-05-12T00:00:00 None +2021-05-13T00:00:00 None +2021-05-14T00:00:00 None +2021-05-15T00:00:00 None +2021-05-16T00:00:00 None +2021-05-17T00:00:00 None +2021-05-18T00:00:00 None +2021-05-19T00:00:00 None +2021-05-20T00:00:00 None +2021-05-21T00:00:00 None +2021-05-22T00:00:00 None +2021-05-23T00:00:00 None +2021-05-24T00:00:00 None +2021-05-25T00:00:00 None +2021-05-26T00:00:00 None +2021-05-27T00:00:00 None +2021-05-28T00:00:00 None +2021-05-29T00:00:00 None +2021-05-30T00:00:00 None +2021-05-31T00:00:00 None +2021-06-01T00:00:00 None +2021-06-02T00:00:00 None +2021-06-03T00:00:00 None +2021-06-04T00:00:00 None +2021-06-05T00:00:00 None +2021-06-06T00:00:00 None +2021-06-07T00:00:00 None +2021-06-08T00:00:00 None +2021-06-09T00:00:00 None +2021-06-10T00:00:00 None +2021-06-11T00:00:00 None +2021-06-12T00:00:00 None +2021-06-13T00:00:00 None +2021-06-14T00:00:00 None +2021-06-15T00:00:00 None +2021-06-16T00:00:00 None +2021-06-17T00:00:00 None +2021-06-18T00:00:00 None +2021-06-19T00:00:00 None +2021-06-20T00:00:00 None +2021-06-21T00:00:00 None +2021-06-22T00:00:00 None +2021-06-23T00:00:00 None +2021-06-24T00:00:00 None +2021-06-25T00:00:00 None +2021-06-26T00:00:00 None +2021-06-27T00:00:00 None +2021-06-28T00:00:00 None +2021-06-29T00:00:00 None +2021-06-30T00:00:00 None +2021-07-01T00:00:00 None +2021-07-02T00:00:00 None +2021-07-03T00:00:00 None +2021-07-04T00:00:00 None +2021-07-05T00:00:00 None +2021-07-06T00:00:00 None +2021-07-07T00:00:00 None +2021-07-08T00:00:00 None +2021-07-09T00:00:00 None +2021-07-10T00:00:00 None +2021-07-11T00:00:00 None +2021-07-12T00:00:00 None +2021-07-13T00:00:00 None +2021-07-14T00:00:00 None +2021-07-15T00:00:00 None +2021-07-16T00:00:00 None +2021-07-17T00:00:00 None +2021-07-18T00:00:00 None +2021-07-19T00:00:00 None +2021-07-20T00:00:00 None +2021-07-21T00:00:00 None +2021-07-22T00:00:00 None +2021-07-23T00:00:00 None +2021-07-24T00:00:00 None +2021-07-25T00:00:00 None +2021-07-26T00:00:00 None +2021-07-27T00:00:00 None +2021-07-28T00:00:00 None +2021-07-29T00:00:00 None +2021-07-30T00:00:00 None +2021-07-31T00:00:00 None +2021-08-01T00:00:00 None +2021-08-02T00:00:00 None +2021-08-03T00:00:00 None +2021-08-04T00:00:00 None +2021-08-05T00:00:00 None +2021-08-06T00:00:00 None +2021-08-07T00:00:00 None +2021-08-08T00:00:00 None +2021-08-09T00:00:00 None +2021-08-10T00:00:00 None +2021-08-11T00:00:00 None +2021-08-12T00:00:00 None +2021-08-13T00:00:00 None +2021-08-14T00:00:00 None +2021-08-15T00:00:00 None +2021-08-16T00:00:00 None +2021-08-17T00:00:00 None +2021-08-18T00:00:00 None +2021-08-19T00:00:00 None +2021-08-20T00:00:00 None +2021-08-21T00:00:00 None +2021-08-22T00:00:00 None +2021-08-23T00:00:00 None +2021-08-24T00:00:00 None +2021-08-25T00:00:00 None +2021-08-26T00:00:00 None +2021-08-27T00:00:00 None +2021-08-28T00:00:00 None +2021-08-29T00:00:00 None +2021-08-30T00:00:00 None +2021-08-31T00:00:00 None +2021-09-01T00:00:00 None +2021-09-02T00:00:00 None +2021-09-03T00:00:00 None +2021-09-04T00:00:00 None +2021-09-05T00:00:00 None +2021-09-06T00:00:00 None +2021-09-07T00:00:00 None +2021-09-08T00:00:00 None +2021-09-09T00:00:00 None +2021-09-10T00:00:00 None +2021-09-11T00:00:00 None +2021-09-12T00:00:00 None +2021-09-13T00:00:00 None +2021-09-14T00:00:00 None +2021-09-15T00:00:00 None +2021-09-16T00:00:00 None +2021-09-17T00:00:00 None +2021-09-18T00:00:00 None +2021-09-19T00:00:00 None +2021-09-20T00:00:00 None +2021-09-21T00:00:00 None +2021-09-22T00:00:00 None +2021-09-23T00:00:00 None +2021-09-24T00:00:00 None +2021-09-25T00:00:00 None +2021-09-26T00:00:00 None +2021-09-27T00:00:00 None +2021-09-28T00:00:00 None +2021-09-29T00:00:00 None +2021-09-30T00:00:00 None +2021-10-01T00:00:00 None +2021-10-02T00:00:00 None +2021-10-03T00:00:00 None +2021-10-04T00:00:00 None +2021-10-05T00:00:00 None +2021-10-06T00:00:00 None +2021-10-07T00:00:00 None +2021-10-08T00:00:00 None +2021-10-09T00:00:00 None +2021-10-10T00:00:00 None +2021-10-11T00:00:00 None +2021-10-12T00:00:00 None +2021-10-13T00:00:00 None +2021-10-14T00:00:00 None +2021-10-15T00:00:00 None +2021-10-16T00:00:00 None +2021-10-17T00:00:00 None +2021-10-18T00:00:00 None +2021-10-19T00:00:00 None +2021-10-20T00:00:00 None +2021-10-21T00:00:00 None +2021-10-22T00:00:00 None +2021-10-23T00:00:00 None +2021-10-24T00:00:00 None +2021-10-25T00:00:00 None +2021-10-26T00:00:00 None +2021-10-27T00:00:00 None +2021-10-28T00:00:00 None +2021-10-29T00:00:00 None +2021-10-30T00:00:00 None +2021-10-31T00:00:00 None +2021-11-01T00:00:00 None +2021-11-02T00:00:00 None +2021-11-03T00:00:00 None +2021-11-04T00:00:00 None +2021-11-05T00:00:00 None +2021-11-06T00:00:00 None +2021-11-07T00:00:00 None +2021-11-08T00:00:00 None +2021-11-09T00:00:00 None +2021-11-10T00:00:00 None +2021-11-11T00:00:00 None +2021-11-12T00:00:00 None +2021-11-13T00:00:00 None +2021-11-14T00:00:00 None +2021-11-15T00:00:00 None +2021-11-16T00:00:00 None +2021-11-17T00:00:00 None +2021-11-18T00:00:00 None +2021-11-19T00:00:00 None +2021-11-20T00:00:00 None +2021-11-21T00:00:00 None +2021-11-22T00:00:00 None +2021-11-23T00:00:00 None +2021-11-24T00:00:00 None +2021-11-25T00:00:00 None diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt index 2f091af136..44474282b2 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt +++ b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Clickhouse/test_simple_join_to_time_spine__query_output.txt @@ -1,45 +1,45 @@ test_name: test_simple_join_to_time_spine test_filename: test_fill_nulls_with_0.py --- -metric_time__day bookings_join_to_time_spine +metric_time__day bookings_join_to_time_spine ------------------- ----------------------------- -2019-11-27T00:00:00 0 -2019-11-28T00:00:00 0 -2019-11-29T00:00:00 0 -2019-11-30T00:00:00 0 -2019-12-01T00:00:00 1 -2019-12-02T00:00:00 0 -2019-12-03T00:00:00 0 -2019-12-04T00:00:00 0 -2019-12-05T00:00:00 0 -2019-12-06T00:00:00 0 -2019-12-07T00:00:00 0 -2019-12-08T00:00:00 0 -2019-12-09T00:00:00 0 -2019-12-10T00:00:00 0 -2019-12-11T00:00:00 0 -2019-12-12T00:00:00 0 -2019-12-13T00:00:00 0 -2019-12-14T00:00:00 0 -2019-12-15T00:00:00 0 -2019-12-16T00:00:00 0 -2019-12-17T00:00:00 0 -2019-12-18T00:00:00 10 -2019-12-19T00:00:00 18 -2019-12-20T00:00:00 2 -2019-12-21T00:00:00 0 -2019-12-22T00:00:00 0 -2019-12-23T00:00:00 0 -2019-12-24T00:00:00 0 -2019-12-25T00:00:00 0 -2019-12-26T00:00:00 0 -2019-12-27T00:00:00 0 -2019-12-28T00:00:00 0 -2019-12-29T00:00:00 0 -2019-12-30T00:00:00 0 -2019-12-31T00:00:00 0 -2020-01-01T00:00:00 5 -2020-01-02T00:00:00 9 -2020-01-03T00:00:00 1 -2020-01-04T00:00:00 0 -2020-01-05T00:00:00 0 +2019-11-27T00:00:00 None +2019-11-28T00:00:00 None +2019-11-29T00:00:00 None +2019-11-30T00:00:00 None +2019-12-01T00:00:00 1 +2019-12-02T00:00:00 None +2019-12-03T00:00:00 None +2019-12-04T00:00:00 None +2019-12-05T00:00:00 None +2019-12-06T00:00:00 None +2019-12-07T00:00:00 None +2019-12-08T00:00:00 None +2019-12-09T00:00:00 None +2019-12-10T00:00:00 None +2019-12-11T00:00:00 None +2019-12-12T00:00:00 None +2019-12-13T00:00:00 None +2019-12-14T00:00:00 None +2019-12-15T00:00:00 None +2019-12-16T00:00:00 None +2019-12-17T00:00:00 None +2019-12-18T00:00:00 10 +2019-12-19T00:00:00 18 +2019-12-20T00:00:00 2 +2019-12-21T00:00:00 None +2019-12-22T00:00:00 None +2019-12-23T00:00:00 None +2019-12-24T00:00:00 None +2019-12-25T00:00:00 None +2019-12-26T00:00:00 None +2019-12-27T00:00:00 None +2019-12-28T00:00:00 None +2019-12-29T00:00:00 None +2019-12-30T00:00:00 None +2019-12-31T00:00:00 None +2020-01-01T00:00:00 5 +2020-01-02T00:00:00 9 +2020-01-03T00:00:00 1 +2020-01-04T00:00:00 None +2020-01-05T00:00:00 None diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql index 58564fe938..6607a927cc 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0.sql @@ -166,7 +166,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -361,12 +361,11 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql index 547f32a3ae..274c434d0e 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_cumulative_fill_nulls__plan0_optimized.sql @@ -20,14 +20,13 @@ FROM ( subq_14.ds AS metric_time__day , COUNT(DISTINCT bookings_source_src_28000.guest_id) AS bookers FROM ***************************.mf_time_spine subq_14 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_14.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_14.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_14.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_14.ds) + )) GROUP BY metric_time__day ) subq_17 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql index 757613d3e8..501bf34d22 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0.sql @@ -63,7 +63,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_5 ) subq_6 - WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01')) ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -372,7 +372,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01')) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql index 1814dfa5fc..d90db28b17 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by__plan0_optimized.sql @@ -20,7 +20,7 @@ FROM ( , date_trunc('month', ds) AS metric_time__month FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_16 - WHERE (metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (metric_time__month > '2020-01-01')) ) subq_18 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -38,7 +38,7 @@ LEFT OUTER JOIN ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (metric_time__month > '2020-01-01')) GROUP BY metric_time__day ) subq_14 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql index b590186b67..f4bfbbcc2b 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0.sql @@ -65,7 +65,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_5 ) subq_6 - WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01')) ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -374,7 +374,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01')) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql index 39fad27979..b0e60e343c 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time__plan0_optimized.sql @@ -21,7 +21,7 @@ FROM ( , date_trunc('month', ds) AS booking__ds__month FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_16 - WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01')) ) subq_18 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -40,7 +40,7 @@ LEFT OUTER JOIN ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01')) GROUP BY booking__ds__day ) subq_14 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql index 8446e6f9c6..5223525cfe 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0.sql @@ -63,7 +63,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_5 ) subq_6 - WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01')) ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -372,7 +372,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01')) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql index 6d6510957a..3d7a69f4f6 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_not_in_group_by_using_agg_time_and_metric_time__plan0_optimized.sql @@ -20,7 +20,7 @@ FROM ( , date_trunc('month', ds) AS booking__ds__month FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_16 - WHERE (metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01') + WHERE ((metric_time__day <= '2020-01-02') AND (booking__ds__month > '2020-01-01')) ) subq_18 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -38,7 +38,7 @@ LEFT OUTER JOIN ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE ((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01') + WHERE (((metric_time__day >= '2020-01-02') AND (metric_time__day <= '2020-01-02')) AND (booking__ds__month > '2020-01-01')) GROUP BY metric_time__day ) subq_14 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql index df50dc8452..59b3f8b759 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0.sql @@ -63,7 +63,7 @@ FROM ( FROM ***************************.mf_time_spine_hour time_spine_src_28005 ) subq_5 ) subq_6 - WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + WHERE ((metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01')) ) subq_7 GROUP BY metric_time__day @@ -649,7 +649,7 @@ FROM ( FROM ***************************.dim_users users_ds_source_src_28000 ) subq_0 ) subq_1 - WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + WHERE ((metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01')) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql index 6129187851..e4e904c3f2 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filter_smaller_than_group_by__plan0_optimized.sql @@ -20,7 +20,7 @@ FROM ( , date_trunc('day', ts) AS metric_time__day FROM ***************************.mf_time_spine_hour time_spine_src_28005 ) subq_16 - WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + WHERE ((metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01')) GROUP BY metric_time__day ) subq_18 @@ -40,7 +40,7 @@ LEFT OUTER JOIN ( , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 ) subq_11 - WHERE (metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01') + WHERE ((metric_time__hour > '2020-01-01 00:09:00') AND (metric_time__day = '2020-01-01')) GROUP BY metric_time__day ) subq_14 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql index a0ab8a9514..e488c344f9 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0.sql @@ -83,9 +83,9 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_6 ) subq_7 - WHERE metric_time__week > '2020-01-01' + WHERE (metric_time__week > '2020-01-01') ) subq_8 - WHERE subq_8.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_8.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_9 ) subq_10 LEFT OUTER JOIN ( @@ -495,9 +495,9 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_2 - WHERE metric_time__week > '2020-01-01' + WHERE (metric_time__week > '2020-01-01') ) subq_3 ) subq_4 GROUP BY @@ -506,5 +506,5 @@ FROM ( ON subq_10.metric_time__day = subq_5.metric_time__day ) subq_11 - WHERE subq_11.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_11.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_12 diff --git a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql index 2743e922c2..ff04879706 100644 --- a/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_filters__plan0_optimized.sql @@ -26,11 +26,11 @@ FROM ( , date_trunc('week', ds) AS metric_time__week FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_20 - WHERE ( + WHERE (( metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' ) AND ( metric_time__week > '2020-01-01' - ) + )) ) subq_23 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -48,13 +48,13 @@ FROM ( , date_trunc('week', ds) AS metric_time__week , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05') ) subq_15 - WHERE metric_time__week > '2020-01-01' + WHERE (metric_time__week > '2020-01-01') GROUP BY metric_time__day ) subq_18 ON subq_23.metric_time__day = subq_18.metric_time__day - WHERE subq_23.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_23.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_25 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql index cbb6f2f2da..065db6a1d4 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0.sql @@ -215,7 +215,7 @@ FROM ( subq_3.ts AS metric_time__hour FROM ***************************.mf_time_spine_hour subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -593,12 +593,11 @@ FROM ( FROM ***************************.dim_users users_ds_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__hour <= subq_2.metric_time__hour - ) AND ( - subq_1.metric_time__hour >= date_trunc('hour', subq_2.metric_time__hour) - ) + WHERE (( + subq_1.metric_time__hour <= subq_2.metric_time__hour + ) AND ( + subq_1.metric_time__hour >= date_trunc('hour', subq_2.metric_time__hour) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql index a9e0c4d787..3bf48da8ec 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_grain_to_date_metric__plan0_optimized.sql @@ -10,7 +10,7 @@ SELECT subq_10.ts AS metric_time__hour , SUM(subq_8.archived_users) AS subdaily_cumulative_grain_to_date_metric FROM ***************************.mf_time_spine_hour subq_10 -INNER JOIN ( +CROSS JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT @@ -18,11 +18,10 @@ INNER JOIN ( , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 ) subq_8 -ON - ( - subq_8.metric_time__hour <= subq_10.ts - ) AND ( - subq_8.metric_time__hour >= date_trunc('hour', subq_10.ts) - ) +WHERE (( + subq_8.metric_time__hour <= subq_10.ts +) AND ( + subq_8.metric_time__hour >= date_trunc('hour', subq_10.ts) +)) GROUP BY metric_time__hour diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql index a7bc63cb58..86357bd4ce 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0.sql @@ -215,7 +215,7 @@ FROM ( subq_3.ts AS metric_time__hour FROM ***************************.mf_time_spine_hour subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'archived_at' SELECT subq_0.ds__day @@ -593,12 +593,11 @@ FROM ( FROM ***************************.dim_users users_ds_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__hour <= subq_2.metric_time__hour - ) AND ( - subq_1.metric_time__hour > DATEADD(hour, -3, subq_2.metric_time__hour) - ) + WHERE (( + subq_1.metric_time__hour <= subq_2.metric_time__hour + ) AND ( + subq_1.metric_time__hour > DATEADD(hour, -3, subq_2.metric_time__hour) + )) ) subq_4 ) subq_5 GROUP BY diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql index 3531b069f1..6be17258a2 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_cumulative_window_metric__plan0_optimized.sql @@ -10,7 +10,7 @@ SELECT subq_10.ts AS metric_time__hour , SUM(subq_8.archived_users) AS subdaily_cumulative_window_metric FROM ***************************.mf_time_spine_hour subq_10 -INNER JOIN ( +CROSS JOIN ( -- Read Elements From Semantic Model 'users_ds_source' -- Metric Time Dimension 'archived_at' SELECT @@ -18,11 +18,10 @@ INNER JOIN ( , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 ) subq_8 -ON - ( - subq_8.metric_time__hour <= subq_10.ts - ) AND ( - subq_8.metric_time__hour > DATEADD(hour, -3, subq_10.ts) - ) +WHERE (( + subq_8.metric_time__hour <= subq_10.ts +) AND ( + subq_8.metric_time__hour > DATEADD(hour, -3, subq_10.ts) +)) GROUP BY metric_time__hour diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql index f104ab2f0e..c90bc0fdfd 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0.sql @@ -68,7 +68,7 @@ FROM ( FROM ***************************.mf_time_spine_hour time_spine_src_28005 ) subq_5 ) subq_6 - WHERE subq_6.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + WHERE (subq_6.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -652,7 +652,7 @@ FROM ( FROM ***************************.dim_users users_ds_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + WHERE (subq_1.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') ) subq_2 ) subq_3 GROUP BY @@ -661,5 +661,5 @@ FROM ( ON subq_8.metric_time__hour = subq_4.metric_time__hour ) subq_9 - WHERE subq_9.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + WHERE (subq_9.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') ) subq_10 diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql index be5742ffd2..54284946ec 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_with_metric__plan0_optimized.sql @@ -16,7 +16,7 @@ FROM ( SELECT ts AS metric_time__hour FROM ***************************.mf_time_spine_hour time_spine_src_28005 - WHERE ts BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + WHERE (ts BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') ) subq_19 LEFT OUTER JOIN ( -- Aggregate Measures @@ -32,11 +32,11 @@ LEFT OUTER JOIN ( date_trunc('hour', archived_at) AS metric_time__hour , 1 AS archived_users FROM ***************************.dim_users users_ds_source_src_28000 - WHERE date_trunc('hour', archived_at) BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' + WHERE (date_trunc('hour', archived_at) BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') ) subq_14 GROUP BY metric_time__hour ) subq_15 ON subq_19.metric_time__hour = subq_15.metric_time__hour -WHERE subq_19.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00' +WHERE (subq_19.metric_time__hour BETWEEN '2020-01-01 02:00:00' AND '2020-01-01 05:00:00') diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql index 5642f3903f..45da64d74e 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0.sql @@ -87,7 +87,7 @@ FROM ( FROM ***************************.mf_time_spine_second time_spine_src_28003 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__second BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' + WHERE (subq_1.metric_time__second BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08') ) subq_2 GROUP BY metric_time__second diff --git a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql index aa9cb2dfaf..b6f663c207 100644 --- a/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlPlan/Clickhouse/test_subdaily_time_constraint_without_metrics__plan0_optimized.sql @@ -9,6 +9,6 @@ sql_engine: Clickhouse SELECT ts AS metric_time__second FROM ***************************.mf_time_spine_second time_spine_src_28003 -WHERE ts BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08' +WHERE (ts BETWEEN '2020-01-01 00:00:02' AND '2020-01-01 00:00:08') GROUP BY metric_time__second diff --git a/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt index d990d9cac2..bf6cc2998a 100644 --- a/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt +++ b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Clickhouse/test_metric_with_metric_in_where_filter__query_output.txt @@ -1,11 +1,11 @@ test_name: test_metric_with_metric_in_where_filter test_filename: test_metric_filter_output.py --- -listing active_listings bookings +listing active_listings bookings ------------------- ----------------- ---------- - 0 3 -l2718281 1 15 -l3141592 1 15 -l5948301 1 7 -l8912456-incomplete 1 3 -l9658588-incomplete 1 3 +l2718281 1 15 +l3141592 1 15 +l5948301 1 7 +l8912456-incomplete 1 3 +l9658588-incomplete 1 3 +no_such_listing None 3 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql index 03881e2635..7b805ed180 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0.sql @@ -253,7 +253,7 @@ FROM ( ON subq_0.listing = subq_6.listing ) subq_7 - WHERE listing__bookings > 2 + WHERE (listing__bookings > 2) ) subq_8 GROUP BY listing diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql index 502906c2be..13395d1b27 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_distinct_values_query_with_metric_filter__plan0_optimized.sql @@ -36,6 +36,6 @@ FROM ( ON lux_listing_mapping_src_28000.listing_id = subq_15.listing ) subq_16 -WHERE listing__bookings > 2 +WHERE (listing__bookings > 2) GROUP BY listing diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql index dd2fee09e2..21cf4df4d6 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql @@ -638,7 +638,7 @@ FROM ( ON subq_1.guest = subq_7.guest ) subq_8 - WHERE guest__booking_value > 1.00 + WHERE (guest__booking_value > 1.00) ) subq_9 ) subq_10 ) subq_11 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql index 5a5e5a441d..445d4ba231 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql @@ -49,4 +49,4 @@ FROM ( ON subq_13.guest = subq_18.guest ) subq_19 -WHERE guest__booking_value > 1.00 +WHERE (guest__booking_value > 1.00) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql index cc04f65752..baeac7b8e8 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0.sql @@ -296,7 +296,7 @@ FROM ( -- Compute Metrics via Expressions SELECT subq_16.user - , CAST(subq_16.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_16.visits, 0) AS DOUBLE PRECISION) AS user__visit_buy_conversion_rate + , CAST(subq_16.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_16.visits, 0) AS Nullable(DOUBLE PRECISION)) AS user__visit_buy_conversion_rate FROM ( -- Combine Aggregated Outputs SELECT @@ -530,7 +530,7 @@ FROM ( ) subq_6 ) subq_7 ) subq_8 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_10.ds__day @@ -687,12 +687,11 @@ FROM ( ) subq_9 ) subq_10 ) subq_11 - ON - ( - subq_8.user = subq_11.user - ) AND ( - (subq_8.metric_time__day <= subq_11.metric_time__day) - ) + WHERE (( + subq_8.user = subq_11.user + ) AND ( + (subq_8.metric_time__day <= subq_11.metric_time__day) + )) ) subq_12 ) subq_13 ) subq_14 @@ -709,7 +708,7 @@ FROM ( ON subq_1.user = subq_18.user ) subq_19 - WHERE user__visit_buy_conversion_rate > 2 + WHERE (user__visit_buy_conversion_rate > 2) ) subq_20 ) subq_21 ) subq_22 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql index 5ecf3e8520..505ba49b44 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_filter_with_conversion_metric__plan0_optimized.sql @@ -21,7 +21,7 @@ SELECT FROM ( -- Join Standard Outputs SELECT - CAST(subq_38.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_38.visits, 0) AS DOUBLE PRECISION) AS user__visit_buy_conversion_rate + CAST(subq_38.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_38.visits, 0) AS Nullable(DOUBLE PRECISION)) AS user__visit_buy_conversion_rate , subq_24.listings AS listings FROM ( -- Read Elements From Semantic Model 'listings_latest' @@ -85,7 +85,7 @@ FROM ( , subq_33.mf_internal_uuid AS mf_internal_uuid , subq_33.buys AS buys FROM sma_28019_cte sma_28019_cte - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -96,12 +96,11 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_33 - ON - ( - sma_28019_cte.user = subq_33.user - ) AND ( - (sma_28019_cte.metric_time__day <= subq_33.metric_time__day) - ) + WHERE (( + sma_28019_cte.user = subq_33.user + ) AND ( + (sma_28019_cte.metric_time__day <= subq_33.metric_time__day) + )) ) subq_34 GROUP BY user @@ -114,4 +113,4 @@ FROM ( ON subq_24.user = subq_38.user ) subq_41 -WHERE user__visit_buy_conversion_rate > 2 +WHERE (user__visit_buy_conversion_rate > 2) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql index 2974a6d062..dfcf7743a8 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0.sql @@ -756,7 +756,7 @@ FROM ( ON subq_1.user = subq_11.listing__user ) subq_12 - WHERE user__listing__user__average_booking_value > 1 + WHERE (user__listing__user__average_booking_value > 1) ) subq_13 ) subq_14 ) subq_15 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql index c271c9aaa6..a8d7551d76 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_group_by_has_local_entity_prefix__plan0_optimized.sql @@ -44,4 +44,4 @@ FROM ( ON sma_28014_cte.user = subq_26.listing__user ) subq_27 -WHERE user__listing__user__average_booking_value > 1 +WHERE (user__listing__user__average_booking_value > 1) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql index a4af158bf6..2746a42249 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0.sql @@ -803,7 +803,7 @@ FROM ( ON subq_1.customer_third_hop_id = subq_15.account_id__customer_id__customer_third_hop_id ) subq_16 - WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 + WHERE (customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2) ) subq_17 ) subq_18 ) subq_19 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql index 4711fabb4a..6d5e7272e1 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_multi_hop__plan0_optimized.sql @@ -51,4 +51,4 @@ FROM ( ON third_hop_table_src_22000.customer_third_hop_id = subq_35.account_id__customer_id__customer_third_hop_id ) subq_36 -WHERE customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2 +WHERE (customer_third_hop_id__account_id__customer_id__customer_third_hop_id__txn_count > 2) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql index b8ec8bdf74..163f3529de 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0.sql @@ -348,7 +348,7 @@ FROM ( FROM ***************************.customer_other_data customer_other_data_src_22000 ) subq_2 ) subq_3 - WHERE customer_id__country = 'paraguay' + WHERE (customer_id__country = 'paraguay') ) subq_4 ) subq_5 GROUP BY @@ -359,7 +359,7 @@ FROM ( ON subq_1.customer_third_hop_id = subq_8.customer_id__customer_third_hop_id ) subq_9 - WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 + WHERE (customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0) ) subq_10 ) subq_11 ) subq_12 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql index 4eddcb5edf..1e7ae75880 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_inner_query_single_hop__plan0_optimized.sql @@ -34,11 +34,11 @@ FROM ( , 1 AS customers_with_other_data FROM ***************************.customer_other_data customer_other_data_src_22000 ) subq_16 - WHERE customer_id__country = 'paraguay' + WHERE (customer_id__country = 'paraguay') GROUP BY customer_id__customer_third_hop_id ) subq_21 ON third_hop_table_src_22000.customer_third_hop_id = subq_21.customer_id__customer_third_hop_id ) subq_22 -WHERE customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0 +WHERE (customer_third_hop_id__customer_id__customer_third_hop_id__paraguayan_customers > 0) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql index 9fcd733d4d..3db7efcf31 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0.sql @@ -638,7 +638,7 @@ FROM ( ON subq_1.listing = subq_7.listing ) subq_8 - WHERE listing__bookers > 1.00 + WHERE (listing__bookers > 1.00) ) subq_9 ) subq_10 ) subq_11 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql index 3a7f77c7fd..5f19ce0bb6 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_filtered_by_itself__plan0_optimized.sql @@ -47,4 +47,4 @@ FROM ( ON subq_13.listing = subq_18.listing ) subq_19 -WHERE listing__bookers > 1.00 +WHERE (listing__bookers > 1.00) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql index 32e53f48b9..9cdabc38e1 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0.sql @@ -516,7 +516,7 @@ FROM ( ON subq_1.listing = subq_7.listing ) subq_8 - WHERE listing__bookings > 2 + WHERE (listing__bookings > 2) ) subq_9 ) subq_10 GROUP BY diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql index 35ce49a9f4..d4c9938f31 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_metric_with_metric_in_where_filter__plan0_optimized.sql @@ -48,6 +48,6 @@ FROM ( ON subq_13.listing = subq_19.listing ) subq_20 -WHERE listing__bookings > 2 +WHERE (listing__bookings > 2) GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql index d08363bd3c..9e172a91c9 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0.sql @@ -390,7 +390,7 @@ FROM ( ON subq_1.user = subq_7.user ) subq_8 - WHERE user__revenue_all_time > 1 + WHERE (user__revenue_all_time > 1) ) subq_9 ) subq_10 ) subq_11 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql index 130b553f96..1c2b7cdb61 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql @@ -42,4 +42,4 @@ FROM ( ON subq_13.user = subq_19.user ) subq_20 -WHERE user__revenue_all_time > 1 +WHERE (user__revenue_all_time > 1) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql index ea1837bf06..4efec66b3b 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0.sql @@ -668,7 +668,7 @@ FROM ( ON subq_1.listing = subq_14.listing ) subq_15 - WHERE listing__views_times_booking_value > 1 + WHERE (listing__views_times_booking_value > 1) ) subq_16 ) subq_17 ) subq_18 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql index 8f12b69771..b5fa77f34a 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql @@ -75,4 +75,4 @@ FROM ( ON subq_20.listing = subq_33.listing ) subq_34 -WHERE listing__views_times_booking_value > 1 +WHERE (listing__views_times_booking_value > 1) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql index aa19b45a72..71b89b8b04 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0.sql @@ -738,7 +738,7 @@ FROM ( ON subq_1.listing = subq_13.listing ) subq_14 - WHERE listing__bookings > 2 AND listing__bookers > 1 + WHERE (listing__bookings > 2 AND listing__bookers > 1) ) subq_15 ) subq_16 ) subq_17 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql index 50a6ae3467..313343bb62 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql @@ -65,4 +65,4 @@ FROM ( ON subq_19.listing = subq_30.listing ) subq_31 -WHERE listing__bookings > 2 AND listing__bookers > 1 +WHERE (listing__bookings > 2 AND listing__bookers > 1) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql index da419afd8c..4332bb9a19 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0.sql @@ -298,7 +298,7 @@ FROM ( -- Compute Metrics via Expressions SELECT subq_12.listing - , CAST(subq_12.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_12.bookers, 0) AS DOUBLE PRECISION) AS listing__bookings_per_booker + , CAST(subq_12.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_12.bookers, 0) AS Nullable(DOUBLE PRECISION)) AS listing__bookings_per_booker FROM ( -- Combine Aggregated Outputs SELECT @@ -745,7 +745,7 @@ FROM ( ON subq_1.listing = subq_14.listing ) subq_15 - WHERE listing__bookings_per_booker > 1 + WHERE (listing__bookings_per_booker > 1) ) subq_16 ) subq_17 ) subq_18 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql index 0bd7f52db3..7b72573a57 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql @@ -13,7 +13,7 @@ SELECT FROM ( -- Join Standard Outputs SELECT - CAST(subq_25.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_25.bookers, 0) AS DOUBLE PRECISION) AS listing__bookings_per_booker + CAST(subq_25.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_25.bookers, 0) AS Nullable(DOUBLE PRECISION)) AS listing__bookings_per_booker , subq_20.listings AS listings FROM ( -- Read Elements From Semantic Model 'listings_latest' @@ -46,4 +46,4 @@ FROM ( ON subq_20.listing = subq_25.listing ) subq_28 -WHERE listing__bookings_per_booker > 1 +WHERE (listing__bookings_per_booker > 1) diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql index b88b931f2f..83edea1942 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0.sql @@ -513,7 +513,7 @@ FROM ( ON subq_1.listing = subq_7.listing ) subq_8 - WHERE listing__bookings > 2 + WHERE (listing__bookings > 2) ) subq_9 ) subq_10 ) subq_11 diff --git a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql index 0de5ec3773..aee561b530 100644 --- a/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlPlan/Clickhouse/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql @@ -45,4 +45,4 @@ FROM ( ON subq_13.listing = subq_19.listing ) subq_20 -WHERE listing__bookings > 2 +WHERE (listing__bookings > 2) diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql index 0cf1ea7aef..24cb6e414b 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0.sql @@ -279,7 +279,7 @@ FROM ( ON subq_0.user = subq_5.user ) subq_6 - WHERE subq_6.metric_time__day BETWEEN '2020-01-01' AND '2020-01-03' + WHERE (subq_6.metric_time__day BETWEEN '2020-01-01' AND '2020-01-03') ) subq_7 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql index f3069ff28a..d5d040d1e2 100644 --- a/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlPlan/Clickhouse/test_dimensions_with_time_constraint__plan0_optimized.sql @@ -16,7 +16,7 @@ FULL OUTER JOIN ***************************.dim_users_latest users_latest_src_28000 ON listings_latest_src_28000.user_id = users_latest_src_28000.user_id -WHERE time_spine_src_28006.ds BETWEEN '2020-01-01' AND '2020-01-03' +WHERE (time_spine_src_28006.ds BETWEEN '2020-01-01' AND '2020-01-03') GROUP BY metric_time__day , listing__is_lux_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql index 814f00b0ad..15e9920b34 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0.sql @@ -8,7 +8,7 @@ sql_engine: Clickhouse SELECT subq_22.metric_time__day , subq_22.user__home_state_latest - , CAST(subq_22.buys AS DOUBLE PRECISION) / CAST(NULLIF(subq_22.visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(subq_22.buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_22.visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -237,7 +237,7 @@ FROM ( ON subq_1.user = subq_3.user ) subq_4 - WHERE visit__referrer_id = '123456' + WHERE (visit__referrer_id = '123456') ) subq_5 ) subq_6 GROUP BY @@ -527,10 +527,10 @@ FROM ( ON subq_9.user = subq_11.user ) subq_12 - WHERE visit__referrer_id = '123456' + WHERE (visit__referrer_id = '123456') ) subq_13 ) subq_14 - INNER JOIN ( + CROSS JOIN ( -- Add column with generated UUID SELECT subq_16.ds__day @@ -687,16 +687,15 @@ FROM ( ) subq_15 ) subq_16 ) subq_17 - ON + WHERE (( + subq_14.user = subq_17.user + ) AND ( ( - subq_14.user = subq_17.user + subq_14.metric_time__day <= subq_17.metric_time__day ) AND ( - ( - subq_14.metric_time__day <= subq_17.metric_time__day - ) AND ( - subq_14.metric_time__day > DATEADD(day, -7, subq_17.metric_time__day) - ) + subq_14.metric_time__day > DATEADD(day, -7, subq_17.metric_time__day) ) + )) ) subq_18 ) subq_19 ) subq_20 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql index f6cde35f58..59a8d64697 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_conversion_metric_query_filters__plan0_optimized.sql @@ -27,7 +27,7 @@ WITH sma_28019_cte AS ( SELECT metric_time__day AS metric_time__day , user__home_state_latest AS user__home_state_latest - , CAST(buys AS DOUBLE PRECISION) / CAST(NULLIF(visits, 0) AS DOUBLE PRECISION) AS visit_buy_conversion_rate_7days + , CAST(buys AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(visits, 0) AS Nullable(DOUBLE PRECISION)) AS visit_buy_conversion_rate_7days FROM ( -- Combine Aggregated Outputs SELECT @@ -56,7 +56,7 @@ FROM ( ON sma_28019_cte.user = rss_28028_cte.user ) subq_27 - WHERE visit__referrer_id = '123456' + WHERE (visit__referrer_id = '123456') GROUP BY metric_time__day , user__home_state_latest @@ -137,9 +137,9 @@ FROM ( ON sma_28019_cte.user = rss_28028_cte.user ) subq_34 - WHERE visit__referrer_id = '123456' + WHERE (visit__referrer_id = '123456') ) subq_36 - INNER JOIN ( + CROSS JOIN ( -- Read Elements From Semantic Model 'buys_source' -- Metric Time Dimension 'ds' -- Add column with generated UUID @@ -150,16 +150,15 @@ FROM ( , generateUUIDv4() AS mf_internal_uuid FROM ***************************.fct_buys buys_source_src_28000 ) subq_39 - ON + WHERE (( + subq_36.user = subq_39.user + ) AND ( ( - subq_36.user = subq_39.user + subq_36.metric_time__day <= subq_39.metric_time__day ) AND ( - ( - subq_36.metric_time__day <= subq_39.metric_time__day - ) AND ( - subq_36.metric_time__day > DATEADD(day, -7, subq_39.metric_time__day) - ) + subq_36.metric_time__day > DATEADD(day, -7, subq_39.metric_time__day) ) + )) ) subq_40 GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql index 60b3579f71..f985aecdb4 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0.sql @@ -334,7 +334,7 @@ FROM ( subq_3.ds AS metric_time__day FROM ***************************.mf_time_spine subq_3 ) subq_2 - INNER JOIN ( + CROSS JOIN ( -- Metric Time Dimension 'ds' SELECT subq_0.ds__day @@ -529,12 +529,11 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - ON - ( - subq_1.metric_time__day <= subq_2.metric_time__day - ) AND ( - subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) - ) + WHERE (( + subq_1.metric_time__day <= subq_2.metric_time__day + ) AND ( + subq_1.metric_time__day > DATEADD(day, -2, subq_2.metric_time__day) + )) ) subq_4 LEFT OUTER JOIN ( -- Pass Only Elements: ['country_latest', 'listing'] @@ -677,7 +676,7 @@ FROM ( ON subq_4.listing = subq_7.listing ) subq_8 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_9 ) subq_10 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql index ee3d7a2b82..95798e19aa 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_cumulative_metric_with_query_time_filters__plan0_optimized.sql @@ -29,21 +29,20 @@ FROM ( , bookings_source_src_28000.is_instant AS booking__is_instant , bookings_source_src_28000.guest_id AS bookers FROM ***************************.mf_time_spine subq_15 - INNER JOIN + CROSS JOIN ***************************.fct_bookings bookings_source_src_28000 - ON - ( - date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds - ) AND ( - date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) - ) + WHERE (( + date_trunc('day', bookings_source_src_28000.ds) <= subq_15.ds + ) AND ( + date_trunc('day', bookings_source_src_28000.ds) > DATEADD(day, -2, subq_15.ds) + )) ) subq_16 LEFT OUTER JOIN ***************************.dim_listings_latest listings_latest_src_28000 ON subq_16.listing = listings_latest_src_28000.listing_id ) subq_20 -WHERE booking__is_instant +WHERE (booking__is_instant) GROUP BY metric_time__day , listing__country_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql index 428c792ba5..7d0bd3e151 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0.sql @@ -15,7 +15,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_11.metric_time__day - , CAST(subq_11.average_booking_value AS DOUBLE PRECISION) / CAST(NULLIF(subq_11.max_booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_fraction_of_max_value + , CAST(subq_11.average_booking_value AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_11.max_booking_value, 0) AS Nullable(DOUBLE PRECISION)) AS instant_booking_fraction_of_max_value FROM ( -- Combine Aggregated Outputs SELECT @@ -333,7 +333,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql index 8b4f7a81b6..ffbbbb2406 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_different_filters_on_same_measure_source_categorical_dimension__plan0_optimized.sql @@ -26,7 +26,7 @@ WITH sma_28009_cte AS ( SELECT metric_time__day AS metric_time__day - , CAST(average_booking_value AS DOUBLE PRECISION) / CAST(NULLIF(max_booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_fraction_of_max_value + , CAST(average_booking_value AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(max_booking_value, 0) AS Nullable(DOUBLE PRECISION)) AS instant_booking_fraction_of_max_value FROM ( -- Combine Aggregated Outputs SELECT @@ -50,7 +50,7 @@ FROM ( , average_booking_value FROM sma_28009_cte sma_28009_cte ) subq_13 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day ) subq_17 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql index b5abfe477c..e5220ce27e 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0.sql @@ -620,7 +620,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_6 ) subq_7 GROUP BY @@ -1375,7 +1375,7 @@ FROM ( ON subq_19.listing = subq_22.listing ) subq_23 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_24 ) subq_25 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql index e21cbf4ca4..8a41870425 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_fill_nulls_time_spine_metric_predicate_pushdown__plan0_optimized.sql @@ -79,7 +79,7 @@ FROM ( ON sma_28009_cte.listing = sma_28014_cte.listing ) subq_38 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , listing__country_latest @@ -134,7 +134,7 @@ FROM ( ON subq_51.listing = sma_28014_cte.listing ) subq_54 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , listing__country_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql index afe5a0e232..2c62bdc9c5 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0.sql @@ -561,7 +561,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE metric_time__day = '2024-01-01' + WHERE (metric_time__day = '2024-01-01') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql index 3392683297..aca7495e33 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_metric_time_filter_with_two_targets__plan0_optimized.sql @@ -34,6 +34,6 @@ FROM ( ON subq_10.listing = listings_latest_src_28000.listing_id ) subq_14 -WHERE metric_time__day = '2024-01-01' +WHERE (metric_time__day = '2024-01-01') GROUP BY listing__country_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql index 2f9a63a4e6..d763217db0 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0.sql @@ -331,7 +331,7 @@ FROM ( ON subq_1.user = subq_3.user ) subq_4 - WHERE listing__is_lux_latest OR listing__capacity_latest > 4 + WHERE (listing__is_lux_latest OR listing__capacity_latest > 4) ) subq_5 ) subq_6 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql index 831a44bc28..6e03d63c10 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_multiple_categorical_dimension_pushdown__plan0_optimized.sql @@ -33,6 +33,6 @@ FROM ( ON subq_9.user = users_latest_src_28000.user_id ) subq_12 -WHERE listing__is_lux_latest OR listing__capacity_latest > 4 +WHERE (listing__is_lux_latest OR listing__capacity_latest > 4) GROUP BY user__home_state_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql index ac7a9f3f97..ce5c55a5a8 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0.sql @@ -576,7 +576,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_6 ) subq_7 GROUP BY @@ -1284,7 +1284,7 @@ FROM ( ON subq_15.listing = subq_18.listing ) subq_19 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_20 ) subq_21 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql index d7c65db337..65de677640 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_offset_metric_with_query_time_filters__plan0_optimized.sql @@ -60,7 +60,7 @@ FROM ( ON sma_28009_cte.listing = sma_28014_cte.listing ) subq_30 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , listing__country_latest @@ -99,7 +99,7 @@ FROM ( ON subq_39.listing = sma_28014_cte.listing ) subq_42 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , listing__country_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql index 051833b1a5..e9c6e5b9a2 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0.sql @@ -570,7 +570,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) ) subq_6 ) subq_7 GROUP BY @@ -982,7 +982,7 @@ FULL OUTER JOIN ( ON subq_11.listing = subq_14.listing ) subq_15 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) ) subq_16 ) subq_17 GROUP BY @@ -995,7 +995,7 @@ FULL OUTER JOIN ( -- Compute Metrics via Expressions SELECT subq_40.listing__capacity_latest - , CAST(subq_40.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_40.views, 0) AS DOUBLE PRECISION) AS bookings_per_view + , CAST(subq_40.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_40.views, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_view FROM ( -- Combine Aggregated Outputs SELECT @@ -1560,7 +1560,7 @@ FULL OUTER JOIN ( ON subq_21.listing = subq_24.listing ) subq_25 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) ) subq_26 ) subq_27 GROUP BY @@ -1972,7 +1972,7 @@ FULL OUTER JOIN ( ON subq_31.listing = subq_34.listing ) subq_35 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) ) subq_36 ) subq_37 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql index 8e572fc9c2..7968ab1b4f 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_saved_query_with_metric_joins_and_filter__plan0_optimized.sql @@ -36,7 +36,7 @@ WITH cm_6_cte AS ( ON subq_43.listing = listings_latest_src_28000.listing_id ) subq_47 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) GROUP BY listing__capacity_latest ) @@ -70,7 +70,7 @@ WITH cm_6_cte AS ( ON subq_53.listing = listings_latest_src_28000.listing_id ) subq_57 - WHERE (listing__is_lux_latest) AND (metric_time__day >= '2020-01-02') + WHERE ((listing__is_lux_latest) AND (metric_time__day >= '2020-01-02')) GROUP BY listing__capacity_latest ) @@ -79,7 +79,7 @@ SELECT COALESCE(cm_6_cte.listing__capacity_latest, cm_7_cte.listing__capacity_latest, subq_64.listing__capacity_latest) AS listing__capacity_latest , MAX(cm_6_cte.bookings) AS bookings , MAX(cm_7_cte.views) AS views - , MAX(CAST(subq_64.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_64.views, 0) AS DOUBLE PRECISION)) AS bookings_per_view + , MAX(CAST(subq_64.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_64.views, 0) AS Nullable(DOUBLE PRECISION))) AS bookings_per_view FROM cm_6_cte cm_6_cte FULL OUTER JOIN cm_7_cte cm_7_cte diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql index 2ea811c16b..21abb5d099 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0.sql @@ -369,7 +369,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_2 ) subq_3 GROUP BY @@ -379,5 +379,5 @@ FROM ( ON subq_7.metric_time__day = subq_4.metric_time__day ) subq_8 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_9 diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql index c96dd71552..619c4435e0 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_pushdown_filter_application__plan0_optimized.sql @@ -36,7 +36,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , booking__is_instant @@ -44,4 +44,4 @@ FROM ( ON time_spine_src_28006.ds = subq_14.metric_time__day ) subq_18 -WHERE booking__is_instant +WHERE (booking__is_instant) diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql index 908521a167..6962450c45 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0.sql @@ -558,7 +558,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql index c5a9317242..62211e4ad8 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_single_categorical_dimension_pushdown__plan0_optimized.sql @@ -31,6 +31,6 @@ FROM ( ON subq_10.listing = listings_latest_src_28000.listing_id ) subq_14 -WHERE booking__is_instant +WHERE (booking__is_instant) GROUP BY listing__country_latest diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql index 198391f497..5c626b2ba8 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0.sql @@ -566,7 +566,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE booking__is_instant OR listing__is_lux_latest + WHERE (booking__is_instant OR listing__is_lux_latest) ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql index 411418011b..2b8fea6bd3 100644 --- a/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_predicate_pushdown_rendering.py/SqlPlan/Clickhouse/test_skipped_pushdown__plan0_optimized.sql @@ -37,6 +37,6 @@ FROM ( ON subq_10.listing = listings_latest_src_28000.listing_id ) subq_14 -WHERE booking__is_instant OR listing__is_lux_latest +WHERE (booking__is_instant OR listing__is_lux_latest) GROUP BY listing__country_latest diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql index 0e05a9698b..b6ce7169e8 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0.sql @@ -131,7 +131,7 @@ FROM ( , listings_latest_src_28000.user_id AS listing__user FROM ***************************.dim_listings_latest listings_latest_src_28000 ) subq_0 - WHERE listing__country_latest = 'us' + WHERE (listing__country_latest = 'us') ) subq_1 GROUP BY listing__country_latest diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql index 89489bca2a..62a2e93fb2 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_distinct_values__plan0_optimized.sql @@ -15,7 +15,7 @@ FROM ( country AS listing__country_latest FROM ***************************.dim_listings_latest listings_latest_src_28000 ) subq_3 -WHERE listing__country_latest = 'us' +WHERE (listing__country_latest = 'us') GROUP BY listing__country_latest ORDER BY listing__country_latest DESC diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql index 5eb0858513..85670771db 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0.sql @@ -558,7 +558,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE listing__country_latest = 'us' + WHERE (listing__country_latest = 'us') ) subq_6 ) subq_7 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql index 46c65299b1..31a95bc8f3 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql @@ -31,6 +31,6 @@ FROM ( ON subq_10.listing = listings_latest_src_28000.listing_id ) subq_14 -WHERE listing__country_latest = 'us' +WHERE (listing__country_latest = 'us') GROUP BY booking__is_instant diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql index 6570998d76..1eb98624bf 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0.sql @@ -397,7 +397,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_0 ) subq_1 - LEFT OUTER JOIN ( + CROSS JOIN ( -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] SELECT subq_2.window_start__day @@ -463,22 +463,21 @@ FROM ( FROM ***************************.dim_listings listings_src_26000 ) subq_2 ) subq_3 - ON + WHERE (( + subq_1.listing = subq_3.listing + ) AND ( ( - subq_1.listing = subq_3.listing + subq_1.metric_time__day >= subq_3.window_start__day ) AND ( ( - subq_1.metric_time__day >= subq_3.window_start__day - ) AND ( - ( - subq_1.metric_time__day < subq_3.window_end__day - ) OR ( - subq_3.window_end__day IS NULL - ) + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL ) ) + )) ) subq_4 - WHERE listing__capacity > 2 + WHERE (listing__capacity > 2) ) subq_5 ) subq_6 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql index 1331f6bc90..744d9aca53 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_join_to_scd_dimension__plan0_optimized.sql @@ -26,23 +26,22 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_9 - LEFT OUTER JOIN + CROSS JOIN ***************************.dim_listings listings_src_26000 - ON + WHERE (( + subq_9.listing = listings_src_26000.listing_id + ) AND ( ( - subq_9.listing = listings_src_26000.listing_id + subq_9.metric_time__day >= listings_src_26000.active_from ) AND ( ( - subq_9.metric_time__day >= listings_src_26000.active_from - ) AND ( - ( - subq_9.metric_time__day < listings_src_26000.active_to - ) OR ( - listings_src_26000.active_to IS NULL - ) + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL ) ) + )) ) subq_12 -WHERE listing__capacity > 2 +WHERE (listing__capacity > 2) GROUP BY metric_time__day diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql index 7499862c18..9244426828 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0.sql @@ -568,7 +568,7 @@ FROM ( ON subq_1.listing = subq_4.listing ) subq_5 - WHERE listing__is_lux_latest + WHERE (listing__is_lux_latest) ) subq_6 ) subq_7 GROUP BY @@ -1130,7 +1130,7 @@ FROM ( ON subq_11.listing = subq_14.listing ) subq_15 - WHERE listing__is_lux_latest + WHERE (listing__is_lux_latest) ) subq_16 ) subq_17 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql index 4db9665026..8e215ced2e 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint__plan0_optimized.sql @@ -44,7 +44,7 @@ FROM ( ON subq_27.listing = listings_latest_src_28000.listing_id ) subq_31 - WHERE listing__is_lux_latest + WHERE (listing__is_lux_latest) GROUP BY metric_time__day ) subq_35 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql index 0e90017746..7cb91cf9cb 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0.sql @@ -5,7 +5,7 @@ sql_engine: Clickhouse -- Compute Metrics via Expressions SELECT subq_11.metric_time__day - , CAST(subq_11.booking_value_with_is_instant_constraint AS DOUBLE PRECISION) / CAST(NULLIF(subq_11.booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_value_ratio + , CAST(subq_11.booking_value_with_is_instant_constraint AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_11.booking_value, 0) AS Nullable(DOUBLE PRECISION)) AS instant_booking_value_ratio FROM ( -- Combine Aggregated Outputs SELECT @@ -323,7 +323,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql index e6a30090ce..24331f55e0 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_reused_measure__plan0_optimized.sql @@ -15,7 +15,7 @@ WITH sma_28009_cte AS ( SELECT metric_time__day AS metric_time__day - , CAST(booking_value_with_is_instant_constraint AS DOUBLE PRECISION) / CAST(NULLIF(booking_value, 0) AS DOUBLE PRECISION) AS instant_booking_value_ratio + , CAST(booking_value_with_is_instant_constraint AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(booking_value, 0) AS Nullable(DOUBLE PRECISION)) AS instant_booking_value_ratio FROM ( -- Combine Aggregated Outputs SELECT @@ -38,7 +38,7 @@ FROM ( , booking_value FROM sma_28009_cte sma_28009_cte ) subq_13 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day ) subq_17 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql index fae012cdd4..fcc46fa039 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0.sql @@ -317,7 +317,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE NOT booking__is_instant + WHERE (NOT booking__is_instant) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql index 7c8f1a3305..62dfdfc4de 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql @@ -23,7 +23,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_7 - WHERE NOT booking__is_instant + WHERE (NOT booking__is_instant) GROUP BY metric_time__day ) subq_11 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql index a9c7d16e0c..5c005fcd0c 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql @@ -4,7 +4,7 @@ sql_engine: Clickhouse --- -- Compute Metrics via Expressions SELECT - CAST(subq_10.bookings AS DOUBLE PRECISION) / CAST(NULLIF(subq_10.listings, 0) AS DOUBLE PRECISION) AS bookings_per_listing + CAST(subq_10.bookings AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(subq_10.listings, 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_listing FROM ( -- Combine Aggregated Outputs SELECT diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql index 59ac124048..ae4b1da184 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql @@ -5,7 +5,7 @@ sql_engine: Clickhouse -- Combine Aggregated Outputs -- Compute Metrics via Expressions SELECT - CAST(MAX(subq_15.bookings) AS DOUBLE PRECISION) / CAST(NULLIF(MAX(subq_20.listings), 0) AS DOUBLE PRECISION) AS bookings_per_listing + CAST(MAX(subq_15.bookings) AS Nullable(DOUBLE PRECISION)) / CAST(NULLIF(MAX(subq_20.listings), 0) AS Nullable(DOUBLE PRECISION)) AS bookings_per_listing FROM ( -- Read Elements From Semantic Model 'bookings_source' -- Metric Time Dimension 'ds' diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql index 17612e28c8..c232f30344 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0.sql @@ -302,7 +302,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_0 ) subq_1 - LEFT OUTER JOIN ( + CROSS JOIN ( -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] SELECT subq_5.window_start__day @@ -524,20 +524,19 @@ FROM ( subq_2.user = subq_4.user ) subq_5 ) subq_6 - ON + WHERE (( + subq_1.listing = subq_6.listing + ) AND ( ( - subq_1.listing = subq_6.listing + subq_1.metric_time__day >= subq_6.window_start__day ) AND ( ( - subq_1.metric_time__day >= subq_6.window_start__day - ) AND ( - ( - subq_1.metric_time__day < subq_6.window_end__day - ) OR ( - subq_6.window_end__day IS NULL - ) + subq_1.metric_time__day < subq_6.window_end__day + ) OR ( + subq_6.window_end__day IS NULL ) ) + )) ) subq_7 ) subq_8 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql index e7474c2796..e2e411bc79 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_through_scd_dimension__plan0_optimized.sql @@ -21,7 +21,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_11 -LEFT OUTER JOIN ( +CROSS JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['user__home_state_latest', 'window_start__day', 'window_end__day', 'listing'] SELECT @@ -35,20 +35,19 @@ LEFT OUTER JOIN ( ON listings_src_26000.user_id = users_latest_src_26000.user_id ) subq_16 -ON +WHERE (( + subq_11.listing = subq_16.listing +) AND ( ( - subq_11.listing = subq_16.listing + subq_11.metric_time__day >= subq_16.window_start__day ) AND ( ( - subq_11.metric_time__day >= subq_16.window_start__day - ) AND ( - ( - subq_11.metric_time__day < subq_16.window_end__day - ) OR ( - subq_16.window_end__day IS NULL - ) + subq_11.metric_time__day < subq_16.window_end__day + ) OR ( + subq_16.window_end__day IS NULL ) ) +)) GROUP BY metric_time__day , listing__user__home_state_latest diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql index 55ddc9f35a..2ebb5aef72 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0.sql @@ -302,7 +302,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_0 ) subq_1 - LEFT OUTER JOIN ( + CROSS JOIN ( -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] SELECT subq_5.lux_listing__window_start__day @@ -501,20 +501,19 @@ FROM ( subq_2.lux_listing = subq_4.lux_listing ) subq_5 ) subq_6 - ON + WHERE (( + subq_1.listing = subq_6.listing + ) AND ( ( - subq_1.listing = subq_6.listing + subq_1.metric_time__day >= subq_6.lux_listing__window_start__day ) AND ( ( - subq_1.metric_time__day >= subq_6.lux_listing__window_start__day - ) AND ( - ( - subq_1.metric_time__day < subq_6.lux_listing__window_end__day - ) OR ( - subq_6.lux_listing__window_end__day IS NULL - ) + subq_1.metric_time__day < subq_6.lux_listing__window_end__day + ) OR ( + subq_6.lux_listing__window_end__day IS NULL ) ) + )) ) subq_7 ) subq_8 GROUP BY diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql index 2fe30f13e8..0f01a35760 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multi_hop_to_scd_dimension__plan0_optimized.sql @@ -21,7 +21,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_26000 ) subq_11 -LEFT OUTER JOIN ( +CROSS JOIN ( -- Join Standard Outputs -- Pass Only Elements: ['lux_listing__is_confirmed_lux', 'lux_listing__window_start__day', 'lux_listing__window_end__day', 'listing'] SELECT @@ -35,20 +35,19 @@ LEFT OUTER JOIN ( ON lux_listing_mapping_src_26000.lux_listing_id = lux_listings_src_26000.lux_listing_id ) subq_16 -ON +WHERE (( + subq_11.listing = subq_16.listing +) AND ( ( - subq_11.listing = subq_16.listing + subq_11.metric_time__day >= subq_16.lux_listing__window_start__day ) AND ( ( - subq_11.metric_time__day >= subq_16.lux_listing__window_start__day - ) AND ( - ( - subq_11.metric_time__day < subq_16.lux_listing__window_end__day - ) OR ( - subq_16.lux_listing__window_end__day IS NULL - ) + subq_11.metric_time__day < subq_16.lux_listing__window_end__day + ) OR ( + subq_16.lux_listing__window_end__day IS NULL ) ) +)) GROUP BY metric_time__day , listing__lux_listing__is_confirmed_lux diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql index e4b4da82e4..449598284e 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0.sql @@ -314,7 +314,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_1.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') ) subq_2 ) subq_3 ) subq_4 @@ -533,7 +533,7 @@ CROSS JOIN ( FROM ***************************.dim_listings_latest listings_latest_src_28000 ) subq_6 ) subq_7 - WHERE subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (subq_7.metric_time__day BETWEEN '2020-01-01' AND '2020-01-01') ) subq_8 ) subq_9 ) subq_10 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql index c5cf4281f0..b15dbe7fbe 100644 --- a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Clickhouse/test_multiple_metrics_no_dimensions__plan0_optimized.sql @@ -16,7 +16,7 @@ FROM ( SELECT SUM(1) AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (date_trunc('day', ds) BETWEEN '2020-01-01' AND '2020-01-01') ) subq_17 CROSS JOIN ( -- Read Elements From Semantic Model 'listings_latest' @@ -28,5 +28,5 @@ CROSS JOIN ( SELECT SUM(1) AS listings FROM ***************************.dim_listings_latest listings_latest_src_28000 - WHERE date_trunc('day', created_at) BETWEEN '2020-01-01' AND '2020-01-01' + WHERE (date_trunc('day', created_at) BETWEEN '2020-01-01' AND '2020-01-01') ) subq_23 diff --git a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql index 92a99dbc61..8ee0006728 100644 --- a/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql +++ b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlPlan/Clickhouse/test_render_where__plan0.sql @@ -6,4 +6,4 @@ sql_engine: Clickhouse SELECT a.booking_value FROM demo.fct_bookings a -WHERE a.booking_value > 100 +WHERE (a.booking_value > 100) diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql index ffb282138a..e030e804d4 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0.sql @@ -69,7 +69,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_5 ) subq_6 - WHERE metric_time__day > '2020-01-01' + WHERE (metric_time__day > '2020-01-01') ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -380,7 +380,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') + WHERE (((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01')) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql index d3625c1c63..dc0312b99f 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_input_measure_constraint__plan0_optimized.sql @@ -24,7 +24,7 @@ FROM ( ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_16 - WHERE metric_time__day > '2020-01-01' + WHERE (metric_time__day > '2020-01-01') ) subq_18 LEFT OUTER JOIN ( -- Constrain Output with WHERE @@ -44,7 +44,7 @@ LEFT OUTER JOIN ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE ((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01') + WHERE (((booking__is_instant) AND (listing IS NOT NULL)) AND (metric_time__day > '2020-01-01')) GROUP BY metric_time__day , booking__is_instant diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql index 8b8bc72c25..2bcbca7cde 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0.sql @@ -70,7 +70,7 @@ FROM ( FROM ***************************.mf_time_spine time_spine_src_28006 ) subq_5 ) subq_6 - WHERE subq_6.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_6.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_7 ) subq_8 LEFT OUTER JOIN ( @@ -379,7 +379,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_1.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_2 ) subq_3 GROUP BY @@ -388,5 +388,5 @@ FROM ( ON subq_8.metric_time__day = subq_4.metric_time__day ) subq_9 - WHERE subq_9.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_9.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_10 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql index 73581798ea..8108331f1d 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_join_to_time_spine_with_queried_time_constraint__plan0_optimized.sql @@ -22,7 +22,7 @@ FROM ( SELECT ds AS metric_time__day FROM ***************************.mf_time_spine time_spine_src_28006 - WHERE ds BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (ds BETWEEN '2020-01-03' AND '2020-01-05') ) subq_19 LEFT OUTER JOIN ( -- Aggregate Measures @@ -38,12 +38,12 @@ FROM ( date_trunc('day', ds) AS metric_time__day , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 - WHERE date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (date_trunc('day', ds) BETWEEN '2020-01-03' AND '2020-01-05') ) subq_14 GROUP BY metric_time__day ) subq_15 ON subq_19.metric_time__day = subq_15.metric_time__day - WHERE subq_19.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05' + WHERE (subq_19.metric_time__day BETWEEN '2020-01-03' AND '2020-01-05') ) subq_21 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql index d109c86393..8afc69c004 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0.sql @@ -357,7 +357,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_2 ) subq_3 GROUP BY diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql index bf2aa84bc3..9e54bf86ac 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_filter__plan0_optimized.sql @@ -30,7 +30,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_10 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day ) subq_13 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql index 086224460c..1423bb7c42 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0.sql @@ -367,7 +367,7 @@ FROM ( FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_0 ) subq_1 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_2 ) subq_3 GROUP BY @@ -377,5 +377,5 @@ FROM ( ON subq_7.metric_time__day = subq_4.metric_time__day ) subq_8 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_9 diff --git a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql index 4bdd1e5d3d..132685e2fe 100644 --- a/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql +++ b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlPlan/Clickhouse/test_simple_join_to_time_spine_with_queried_filter__plan0_optimized.sql @@ -39,7 +39,7 @@ FROM ( , 1 AS bookings FROM ***************************.fct_bookings bookings_source_src_28000 ) subq_11 - WHERE booking__is_instant + WHERE (booking__is_instant) GROUP BY metric_time__day , booking__is_instant @@ -47,5 +47,5 @@ FROM ( ON time_spine_src_28006.ds = subq_14.metric_time__day ) subq_18 - WHERE booking__is_instant + WHERE (booking__is_instant) ) subq_19 From 9b0aa686f8298366d01527a731c52c9dec666d16 Mon Sep 17 00:00:00 2001 From: Thiago Salvatore Date: Thu, 16 Jan 2025 11:49:05 -0300 Subject: [PATCH 6/6] change to use toStart instead of dateTrunc --- metricflow/sql/render/clickhouse.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/metricflow/sql/render/clickhouse.py b/metricflow/sql/render/clickhouse.py index ae305e932e..8df7486de9 100644 --- a/metricflow/sql/render/clickhouse.py +++ b/metricflow/sql/render/clickhouse.py @@ -141,26 +141,26 @@ def visit_date_trunc_expr(self, node: SqlDateTruncExpression) -> SqlExpressionRe # Map the granularity to Clickhouse's date truncation functions trunc_function = { - TimeGranularity.DAY: "day", - TimeGranularity.WEEK: "week", - TimeGranularity.MONTH: "month", - TimeGranularity.QUARTER: "quarter", - TimeGranularity.YEAR: "year", - TimeGranularity.HOUR: "hour", - TimeGranularity.SECOND: "second", - TimeGranularity.MINUTE: "minute", - TimeGranularity.MILLISECOND: "millisecond", + TimeGranularity.DAY: "toStartOfDay", + TimeGranularity.WEEK: "toStartOfWeek", + TimeGranularity.MONTH: "toStartOfMonth", + TimeGranularity.QUARTER: "toStartOfQuarter", + TimeGranularity.YEAR: "toStartOfYear", + TimeGranularity.HOUR: "toStartOfHour", + TimeGranularity.SECOND: "toStartOfSecond", + TimeGranularity.MINUTE: "toStartOfMinute", + TimeGranularity.MILLISECOND: "toStartOfMillisecond", }[node.time_granularity] # For millisecond precision, we need to cast to DateTime64 if node.time_granularity == TimeGranularity.MILLISECOND: return SqlExpressionRenderResult( - sql=f"date_trunc('{trunc_function}', CAST({arg_rendered.sql} AS DateTime64(3)))", + sql=f"{trunc_function}(CAST({arg_rendered.sql} AS DateTime64(3))", bind_parameter_set=arg_rendered.bind_parameter_set, ) return SqlExpressionRenderResult( - sql=f"date_trunc('{trunc_function}', {arg_rendered.sql})", + sql=f"{trunc_function}({arg_rendered.sql})", bind_parameter_set=arg_rendered.bind_parameter_set, )